繁体   English   中英

如何一步删除主键?

[英]How is it possible to drop primary key in one step?

我想删除表的主键,但保留列(如果有帮助,我知道列的名称)。

我使用这个脚本来获取主键的名称:

-- Return the name of primary key.  
SELECT key_name  
FROM sys.key_constraints  
WHERE type = 'PK' AND OBJECT_NAME(parent_object_id) = 'my_table'; 

然后我像这样删除密钥:

ALTER TABLE Production.TransactionHistoryArchive  
DROP CONSTRAINT key_name ;   

它可以工作,但我必须在一个 go 中运行这个脚本。 如何将删除约束与 select 查询结合起来?

如果它对您有用,将把它扔在那里。 使用动态 SQL,您可以构建可以轻松创建过程的东西。

declare @Schema nvarchar(20)=N'Production',
  @Table nvarchar(50)=N'TransactionHistoryArchive',
  @sql nvarchar(100)=''

select @sql='ALTER TABLE ' 
  + QuoteName(@Schema) + '.'
  + QuoteName(@Table) 
  + ' DROP CONSTRAINT ' 
  + QuoteName(name)
from sys.key_constraints  
where type = 'PK' and Object_Name(parent_object_id) = @Table and [schema_id]=Schema_Id(@Schema)

print @sql
exec sp_executesql @sql

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM