如何解决通过 alter table 命令删除 T-SQL 中的约束 - 问题
alter table Persons
drop primary key;
还有消息: 消息 156,级别 15,状态 1,第 10 行 关键字“primary”附近的语法不正确。
我检查了不同的语法组合,但都没有奏效。 这里有什么问题?
表格就是这样创建的 - 这只是学习的开始,非常简单,只有两个约束。
create table Persons(
PersonID int not null primary key,LastName varchar(255),FirstName varchar(255),Address varchar(255),City varchar(255)
);
解决方法
不是DROP PRIMARY KEY
,而是DROP CONSTRAINT {Object Name}
。例如:
CREATE TABLE dbo.YourTable (ID int NOT NULL);
GO
ALTER TABLE dbo.YourTable ADD CONSTRAINT PK_YourTable PRIMARY KEY CLUSTERED (ID);
GO
ALTER TABLE dbo.YourTable DROP CONSTRAINT PK_YourTable;
GO
DROP TABLE dbo.YourTable;
这就是为什么显式命名您的对象如此重要的原因,如上所示,因为您现在不知道 CONSTRAINT
的名称是什么。但是,您可以通过以下方式获取名称:
SELECT kc.[name]
FROM sys.key_constraints kc
JOIN sys.tables t ON kc.parent_object_id = t.object_id
JOIN sys.schemas s ON t.schema_id = t.schema_id
WHERE s.[name] = N'dbo'
AND t.[name] = N'YourTable'
AND kc.[type] = 'PK';
如果你真的不想找出名字然后写语句,你可以使用动态语句:
DECLARE @SQL nvarchar(MAX);
SET @SQL = (SELECT N'ALTER TABLE ' + QUOTENAME(s.[name]) + N'.' + QUOTENAME(t.[name]) + N' DROP CONSTRAINT ' + QUOTENAME(kc.[name]) + N';'
FROM sys.key_constraints kc
JOIN sys.tables t ON kc.parent_object_id = t.object_id
JOIN sys.schemas s ON t.schema_id = t.schema_id
WHERE s.[name] = N'dbo'
AND t.[name] = N'YourTable'
AND kc.[type] = 'PK');
EXEC sys.sp_executesql @SQL;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。