2013-01-19 90 views
5

我已經使用腳本在我的表上創建了一些約束,但沒有指定約束名稱。結果,我最終遇到了像FK__DOC_OBGS___kntr___54E63309這樣的限制。SQL刪除自動約束條件

是否可以在沒有指定確切約束名稱的情況下刪除約束?

例如,這樣的事情(不工作)

ALTER TABLE DOC_OBGS_10 DROP CONSTRAINT LIKE 'FK__DOC_OBGS___kntr%' 

的問題是,我們有很多與此表的數據庫,我需要從表中刪除所有的限制,但顯然每個表的名稱都不相同。

+1

這是爲什麼約束要始終** **被明確根據另一個名爲很好的理由以您選擇的命名約定... –

+1

是的,人們通過他們的錯誤學習:)) –

回答

2
DECLARE @sql1 NVARCHAR(MAX); 
SELECT @sql1 = c 
FROM 
(
    SELECT 'ALTER TABLE DOC_INVS_1 DROP CONSTRAINT ' + CONSTRAINT_NAME + '; ' 
    FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_NAME = 'DOC_INVS_1' 
    and CONSTRAINT_NAME LIKE 'FK__DOC_INVS___kntr%' 
) T(c); 

EXEC(@sql1); 
4

SQL中的DDL命令不與like運算符配合使用。

但是,您可以使用INFORMATION_SCHEMA視圖,方便地建立SQL的下降約束命令,就像這樣:

SELECT 'ALTER TABLE DOC_OBGS_10 DROP CONSTRAINT ' + CONSTRAINT_NAME 
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS 
WHERE CONSTRAINT_NAME LIKE 'FK__DOC_OBGS___kntr%' 
+0

謝謝。我用你的想法,併爲我的情況與此解決方案來了::SELECT'ALTER TABLE DOC_INVS_1 DROP CONSTRAINT'+ CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_NAME ='DOC_INVS_1' 和CONSTRAINT_NAME LIKE'FK__DOC_INVS ___ kntr%'問題是,如何剔除腳本返回的查詢?我嘗試使用Exec,但我想我必須包括一些括號或東西。對不起,我是SQL的新手 –

+0

你使用哪個DBMS? MS-SQL? – pkmiec

+0

是的,Microsoft SQL –