滴在SQL Server数据库中使用脚本的主键[复制](Drop primary key using

2019-07-05 20:41发布

这个问题已经在这里有一个答案:

  • 在SQL Server上的动态查找主键约束2005年 3答案

我需要删除表的主键Student在一个SQL 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这将是随机生成的,请帮我用脚本 ,删除主键约束。

提前致谢

Answer 1:

你可以看一下在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;

这个代码是从亚伦贝特朗( 源 )。



Answer 2:

只需点击

“数据库”>表>你的表名>键>复制像“PK__TableName__30242045”的约束

并运行下面的查询:

Query:alter Table 'TableName' drop constraint PK__TableName__30242045


Answer 3:

我得到的答案是,变量和子查询将无法正常工作,我们必须动态用户的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)


文章来源: Drop primary key using script in SQL Server database [duplicate]