【发布时间】:2016-07-17 04:13:32
【问题描述】:
我创建了一个没有指定名称的外键,因此 sql server 使用自动生成的名称创建了它。现在我想删除具有此外键的列。问题是我不知道这个外键的名称。有没有办法删除特定表中特定列的所有外键?
到目前为止,我发现这个脚本可以删除列的所有默认约束
DECLARE @tableName VARCHAR(MAX)
DECLARE @ConstraintName nvarchar(200)
DECLARE @columnName VARCHAR(MAX)
SET @tableName = 'tablename'
SET @columnName = 'columnname'
SELECT @ConstraintName = Name
FROM SYS.DEFAULT_CONSTRAINTS
WHERE PARENT_OBJECT_ID = OBJECT_ID(@tableName)
AND PARENT_COLUMN_ID = (
SELECT column_id FROM sys.columns
WHERE NAME = @columnName AND object_id = OBJECT_ID(@tableName))
IF @ConstraintName IS NOT NULL
BEGIN
EXEC('ALTER TABLE '+@tableName+' DROP CONSTRAINT ' + @ConstraintName)
END
ALTER TABLE [tablename] DROP COLUMN columnname
GO
但它对外键约束没有帮助。
【问题讨论】:
-
EXEC sp_help 'TABLE_NAME';从结果集中复制 FK 约束名称,然后使用DROP CONSTRAINT命令删除它!
标签: sql sql-server tsql