2013-04-03 69 views
9

我正試圖編寫用於刪除約束條件的腳本。刪除表中的所有約束條件

我有以下功能在我的數據庫

SELECT name 
    FROM sys.foreign_keys 

選擇Constarints我已經使用上述腳本

SELECT 
    'ALTER TABLE ' + OBJECT_NAME(parent_object_id) + 
    ' DROP CONSTRAINT ' + name 
FROM sys.foreign_keys 

使用上面的查詢我怎樣才能執行這些限制寫入修改腳本, ?

我可以使用DROP DATABASE DBName。但我只是想通過刪除約束來刪除表。

是否有可能不去SP?或者我可以進行任何簡單的方法?

+0

查看該[文章] [1]中的評論。 [1]:http://stackoverflow.com/a/6130023/2232256 – dferidarov

回答

29

那麼你總是可以複製底部窗格的輸出,將其粘貼到頂部窗格中,然後按F5鍵。或者,你可以建立一個字符串,直接執行:

DECLARE @sql NVARCHAR(MAX) = N''; 

SELECT @sql += N' 
ALTER TABLE ' + QUOTENAME(OBJECT_SCHEMA_NAME(parent_object_id)) 
    + '.' + QUOTENAME(OBJECT_NAME(parent_object_id)) + 
    ' DROP CONSTRAINT ' + QUOTENAME(name) + ';' 
FROM sys.foreign_keys; 

PRINT @sql; 
-- EXEC sp_executesql @sql; 

(當你高興與PRINT輸出,其註釋掉,並取消對EXEC注意,打印輸出將在Management Studio中,但被截斷爲8K的變量真的保存了整個命令)。

另外我不知道這與你是否使用存儲過程有關,或者你爲什麼試圖「不去SP」。 ..這個查詢可以作爲一個存儲過程運行或不運行,這一切都取決於你打電話給它的頻率,過程所在的地方等。

+0

謝謝@Aaron。那正是我正在尋找的東西。雅我會轉換爲SP,如你所說 – user2067567

+0

在你上面的查詢+ =是指循環?它是如何工作的? – user2067567

+0

是的,它基本上是在結果中的每一行的字符串連接。你也可以說'SELECT @sql = @sql + N'...'事實上這就是你在SQL Server 2005中如何做到的。這是在SQL Server 2008中引入的新語法。 –

15

這在SQL Server 2008爲我工作:

DECLARE @SQL NVARCHAR(MAX) = N''; 

SELECT @SQL += N' 
ALTER TABLE ' + OBJECT_NAME(PARENT_OBJECT_ID) + ' DROP CONSTRAINT ' + OBJECT_NAME(OBJECT_ID) + ';' 
FROM SYS.OBJECTS 
WHERE TYPE_DESC LIKE '%CONSTRAINT' AND OBJECT_NAME(PARENT_OBJECT_ID) = 'YOUR_TABLE'; 

PRINT @SQL 
--EXECUTE(@SQL) 

當然,取消對EXECUTE(@SQL)準備時運行

+0

完美答案它適用於我也...非常感謝 –

+0

我更喜歡這個,因爲它告訴你如何以特定的表格爲目標。 – AS7K

0

正確的標記問題並不爲我工作。但這對我來說在SQL Server 2017中有效:

DECLARE @sql NVARCHAR(MAX) = N''; 

SELECT @sql += N' 
ALTER TABLE ' + QUOTENAME(OBJECT_SCHEMA_NAME(parent_object_id)) 
    + '.' + QUOTENAME(OBJECT_NAME(parent_object_id)) + 
    ' DROP CONSTRAINT ' + QUOTENAME(name) + ';' 
FROM sys.objects 
WHERE type_desc LIKE '%CONSTRAINT' 
    AND OBJECT_NAME(PARENT_OBJECT_ID) LIKE 'your_table_name'; 

EXEC sp_executesql @sql; 
+1

雖然這個只有代碼的帖子可能會回答這個問題,但請添加一個解釋它爲什麼這麼做的解釋。這將有助於未來的讀者評估他們的情況的答案。 –