54

我需要删除StudentSQL Server 数据库中表的主键。

我在表格中进行了编辑,我得到的脚本是

ALTER TABLE dbo.Student
    DROP CONSTRAINT PK__Student__9CC368536561EF8B

但是当我在 SQL Server 查询浏览器中运行此脚本以删除主键时

它显示了消息

消息 3728,级别 16,状态 1,第 1 行
“PK__Student__9CC368536561EF8B”不是约束。
消息 3727,第 16 级,状态 0,第 1 行

就我而言,我认为PK__Student__9CC368536561EF8B这将是随机生成的,请帮助我使用script删除主键约束。

提前致谢

4

3 回答 3

99

您可以在 sys.key_constraints 表中查找约束名称:

SELECT name
FROM   sys.key_constraints
WHERE  [type] = 'PK'
       AND [parent_object_id] = Object_id('dbo.Student');

如果你不在乎名字,而只是想删除它,你可以使用这个和动态sql的组合:

DECLARE @table NVARCHAR(512), @sql NVARCHAR(MAX);

SELECT @table = N'dbo.Student';

SELECT @sql = 'ALTER TABLE ' + @table 
    + ' DROP CONSTRAINT ' + name + ';'
    FROM sys.key_constraints
    WHERE [type] = 'PK'
    AND [parent_object_id] = OBJECT_ID(@table);

EXEC sp_executeSQL @sql;

此代码来自 Aaron Bertrand(来源)。

于 2012-12-19T08:54:19.113 回答
17

只需点击

'数据库'>表>你的表名>键>复制像'PK__TableName__30242045'这样的约束

并运行以下查询是:

Query:alter Table 'TableName' drop constraint PK__TableName__30242045
于 2015-06-04T09:23:02.507 回答
5

我得到的答案是变量和子查询不起作用,我们必须使用动态 SQL 脚本。以下作品:

DECLARE @SQL VARCHAR(4000)
SET @SQL = 'ALTER TABLE dbo.Student DROP CONSTRAINT |ConstraintName| '

SET @SQL = REPLACE(@SQL, '|ConstraintName|', ( SELECT   name
                                               FROM     sysobjects
                                               WHERE    xtype = 'PK'
                                                        AND parent_obj =        OBJECT_ID('Student')))

EXEC (@SQL)
于 2012-12-19T10:05:42.097 回答