如何创建主键,其值是将现有列与另一列连接在一起?

时间:2018-10-15 15:30:02

标签: sql-server primary-key

我知道您可以在sql中有一个复合键,但是那不是我想要的。我的理由是因为该表已经存在并且其中包含数据,因此我正在寻找一种快速修复方法,该方法不涉及创建新表并实质上不推荐使用旧表。当我尝试将现有列制作为组合键时,我收到一条错误消息,提示进行这些更改将需要删除并重新创建表。因此,我想做的是添加一个主键列,它是一个nvarchar,它是从一个现有列创建的,该现有列是一个nvarchar与另一个存在的列bigign串联在一起的。这是可能的,如果可以的话,如何在SQL Server Management Studio中查询或从表的设计屏幕上做到这一点?

1 个答案:

答案 0 :(得分:1)

首先,创建数据库备份。

然后,如果您只想更改主键:

ALTER TABLE [dbo].MyTable DROP CONSTRAINT [PK_MyTable]

ALTER TABLE [dbo].MyTable ADD  CONSTRAINT [PK_MyTable] PRIMARY KEY CLUSTERED 
(
    columnA ASC,
    columnB ASC
)

如果您确实要创建一个新列,该列是主键,其值是与另一列串联的现有列:

ALTER TABLE MyTable ADD NewColumn AS (nvarcharColumn + cast(bigIntColumn as nvarchar(50))) PERSISTED  NOT NULL

ALTER TABLE [dbo].MyTable DROP CONSTRAINT [PK_MyTable]

ALTER TABLE [dbo].MyTable ADD  CONSTRAINT [PK_MyTable] PRIMARY KEY CLUSTERED 
(
    NewColumn ASC
)