小编典典

SQL Server:删除表主键,但不知道其名称

sql

你好,

使用:SQL Server数据库:Northwind

我想在不知道PK约束名称的情况下删除表主键。

例如,使用罗斯文示例数据库中的类别表,主键列为“ CategoryId”,主键名称为“ PK_Categories”

我可以在知道主键名称的同时放下主键:

ALTER TABLE categories DROP CONSTRAINT PK_Categories;

我还可以通过表名获取表的主键名称:

select name from sysobjects where xtype = 'PK' and parent_obj = object_id('categories')

但是,如果不先知道主键名称,就无法将它们放在一起以删除表的主键。

我在尝试:

ALTER TABLE categories DROP CONSTRAINT


(select name from sysobjects where xtype = 'PK' and parent_obj = object_id('categories') )

谁能告诉我我要去哪里错了?


阅读 197

收藏
2021-04-15

共1个答案

小编典典

您必须为此使用动态SQL,因为ALTER TABLE不接受变量或子查询。

CREATE TABLE PKTest ( ID INT PRIMARY KEY ) ;

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

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

EXEC (@SQL)

DROP TABLE PKTest
2021-04-15