mut*_*mar 43 sql-server sql-server-2005 sql-server-2008
我需要删除Student
SQL Server数据库中表的主键.
我已经在表格中编辑了,我得到的脚本是
ALTER TABLE dbo.Student
DROP CONSTRAINT PK__Student__9CC368536561EF8B
Run Code Online (Sandbox Code Playgroud)
但是当我在SQL Server查询浏览器中运行此脚本以删除主键时
它显示了该消息
Msg 3728,Level 16,State 1,Line
1'PK__Student__9CC368536561EF8B'不是约束.
Msg 3727,Level 16,State 0,Line 1
令我担心的是,我认为PK__Student__9CC368536561EF8B
这将随机生成,请帮助我使用脚本删除主键约束.
提前致谢
Bri*_*dge 80
您可以在sys.key_constraints表中查找约束名称:
SELECT name
FROM sys.key_constraints
WHERE [type] = 'PK'
AND [parent_object_id] = Object_id('dbo.Student');
Run Code Online (Sandbox Code Playgroud)
如果你不关心这个名字,但只是想删除它,你可以使用这个和动态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;
Run Code Online (Sandbox Code Playgroud)
此代码来自Aaron Bertrand(来源).
小智 13
只需点击
'数据库'>表>你的表名>键>复制像'PK__TableName__30242045'这样的约束
并运行以下查询是:
Query:alter Table 'TableName' drop constraint PK__TableName__30242045
Run Code Online (Sandbox Code Playgroud)
我得到的答案是变量和子查询将不起作用,我们必须使用动态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)
Run Code Online (Sandbox Code Playgroud)