这个问题已经在这里有一个答案:
- 在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
这将是随机生成的,请帮我用脚本 ,删除主键约束。
提前致谢
你可以看一下在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;
这个代码是从亚伦贝特朗( 源 )。
只需点击
“数据库”>表>你的表名>键>复制像“PK__TableName__30242045”的约束
并运行下面的查询:
Query:alter Table 'TableName' drop constraint PK__TableName__30242045
我得到的答案是,变量和子查询将无法正常工作,我们必须动态用户的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)