Sql-Server
如何從所有表中刪除所有約束?
我想從 SQL Server 數據庫中的所有表中刪除所有預設約束、檢查約束、唯一約束、主鍵和外鍵。我知道如何從中獲取所有約束名稱
sys.objects
,但是如何填充該ALTER TABLE
部分?
您可以通過加入
sys.tables.object_id = sys.objects.parent_object_id
這些對像類型輕鬆獲取此資訊。DECLARE @sql NVARCHAR(MAX); SET @sql = N''; SELECT @sql = @sql + N' ALTER TABLE ' + QUOTENAME(s.name) + N'.' + QUOTENAME(t.name) + N' DROP CONSTRAINT ' + QUOTENAME(c.name) + ';' FROM sys.objects AS c INNER JOIN sys.tables AS t ON c.parent_object_id = t.[object_id] INNER JOIN sys.schemas AS s ON t.[schema_id] = s.[schema_id] WHERE c.[type] IN ('D','C','F','PK','UQ') ORDER BY c.[type]; PRINT @sql; --EXEC sys.sp_executesql @sql;
EXEC
目的)-如果您有很多限制,它可能不會顯示整個腳本,因為SELECT CONVERT(xml, @sql);
對輸出感到滿意後,取消註釋
EXEC
.