sql-server – 如何从所有表中删除所有约束?

前端之家收集整理的这篇文章主要介绍了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;

PRINT只是用于眼球 – 如果你有很多约束,它可能不会显示整个脚本,因为它限制在8K.在这些情况下,请参阅this tip以了解在运行之前验证脚本的其他方法.

一旦您对输出感到满意,请取消注释EXEC.

猜你在找的MsSQL相关文章