使用SQL Server数据库中的脚本删除主键

时间:2012-12-19 08:36:22

标签: sql-server sql-server-2008 sql-server-2005

我需要将表Student的主键放在SQL Server数据库中。

我已经在表格中编辑了,我得到的脚本是

ALTER TABLE dbo.Student
    DROP CONSTRAINT PK__Student__9CC368536561EF8B

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

显示消息

  

Msg 3728,Level 16,State 1,Line 1
  'PK__Student__9CC368536561EF8B'不是约束   消息3727,级别16,状态0,行1

令我担心的是,我认为PK__Student__9CC368536561EF8B这将随机生成 请帮我使用脚本删除主键约束。

提前致谢

3 个答案:

答案 0 :(得分:76)

您可以在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(source)。

答案 1 :(得分:13)

只需点击

即可
  

'数据库'>表>您的表名>键>复制约束,例如'PK__TableName__30242045'

并运行以下查询:

wp_head()

答案 2 :(得分:4)

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