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