动态选择表上的T-SQL丢弃约束

时间:2016-03-28 16:50:37

标签: sql-server tsql

我遇到一种情况,我知道一个约束名称,但不知道表的名称。我想写一个脚本,根据它的名称查找和删除约束,而不管它所在的表是什么。我的麻烦是,这似乎只适用于alter table语句,它假设你知道表名。我可以使用这个来找到约束:

SELECT *
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE CONSTRAINT_NAME='constraint_name'

并且想使用那里提供的表信息来改变我的结果中的任何表并删除约束。

我想要的伪代码:

alter table (select top 1* TABLE_NAME from 
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE CONSTRAINT_NAME='constraint_name') drop constraint 'constraint_name' 

1 个答案:

答案 0 :(得分:1)

declare @constraint varchar(255)
declare @tbalename varchar(255)

declare @tbalename=select table_name from INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE CONSTRAINT_NAME=@constraint 

declare @sql nvarchar(max)

set @sql='ALTER TABLE '+@tbalename +'DROP CONSTRAINT '+ @constraint ; 

exec(@SQL)