我需要将表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
这将随机生成
请帮我使用脚本删除主键约束。
提前致谢
答案 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)