Friday, 15 July 2011

How to check for foreign key dependency before deleting a row in MSSQL


Sample Query

declare @TabName varchar(150) = 'TableName'
declare @ColName varchar(150) = 'ColumnName'
declare @Value varchar(150) = Specify Value
declare @sql varchar(MAX) = ''
Declare @Temp table ( Cnt int)

;With ReferencedKeys as
(
    select    o1.name as Referencing_Object_name, c1.name as referencing_column_Name
        , o2.name as Referenced_Object_name    , c2.name as Referenced_Column_Name
        , s.name as Constraint_name
    from sysforeignkeys fk
        inner join sysobjects o1 on fk.fkeyid = o1.id
        inner join sysobjects o2 on fk.rkeyid = o2.id
        inner join syscolumns c1 on c1.id = o1.id and c1.colid = fk.fkey
        inner join syscolumns c2 on c2.id = o2.id and c2.colid = fk.rkey
        inner join sysobjects s on fk.constid = s.id
    where o2.name = @TabName and c2.name = @ColName
)
select @sql += 'Select ' + referencing_column_Name + ' from ' + Referencing_Object_name 
    + ' where ' + referencing_column_Name + '=' + @Value + ' union all '
from ReferencedKeys

select @sql = Substring(@sql,0,LEN(@sql) - 9)

insert into @Temp
exec (@sql)

select * from @Temp

--Idea got from SQL Authority.com

No comments:

Post a Comment