2016-03-28 37 views
0

我有一種情況,我知道約束名稱但不知道表的名稱。我想編寫一個腳本,根據它的名稱找到並刪除約束,而不管它駐留的表是什麼。我的麻煩是,這似乎只適用於alter table語句,它假定你知道表名。我能找到使用這個約束:動態選定表上的T-SQL丟棄約束

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' 
+0

您需要選擇表和約束名稱爲** **的變量,然後構造要執行的的T-SQL語句動態地在T-SQL中使用'nvarchar'字符串,然後使用'sp_executesql'執行該語句 –

回答

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

declare @tbalename=select table_name from INFORMATION_SCHEMA.TABLE_CONSTRAINTS 
WHERE [email protected] 

declare @sql nvarchar(max) 

set @sql='ALTER TABLE '[email protected] +'DROP CONSTRAINT '+ @constraint ; 

exec(@SQL)