将数据类型更改为属于聚集主键的列

问题描述 投票:0回答:1

我需要更改属于聚集键一部分的列的数据类型 我在帖子中看到,最好的方法是创建一个具有所需类型的新列,将数据从原始列移动到那里,然后删除原始列并将新列重命名为原始列的名称。 我的问题是,这会不会有问题,因为该列是主键的一部分? 如何在不删除/添加 PK 的情况下做到这一点? 谢谢,

ALTER TABLE dbo.ff
ADD SSN binary(32) NOT NULL

--set encrypted data
UPDATE dbo.ff
   SET SSN = [dbo].[gg(PassId)

ALTER TABLE dbo.ff
DROP COLUMN PassId

EXEC sp_RENAME '[dbo].[ff].SSN' , 'PassId', 'COLUMN'


END
GO
sql sql-server primary-key
1个回答
0
投票

尝试这个(根据需要正确)可以在不删除或添加主键约束的情况下这样做

--ADD A NEW COLUMN
--THEN WE UPDATE THIS table
--THEN UPDATE PRIMARY KEY
--DROP ORIGINAL COLUMN
--AND RENAME NEW COLUMN
ALTER TABLE dbo.ff
ADD NewColumn binary(32) NOT NULL;

UPDATE dbo.ff
SET NewColumn = [dbo].[gg(PassId)];

ALTER TABLE dbo.ff
DROP CONSTRAINT PK_ff;
ALTER TABLE dbo.ff
ADD CONSTRAINT PK_ff PRIMARY KEY (NewColumn);

ALTER TABLE dbo.ff
DROP COLUMN PassId;

EXEC sp_RENAME '[dbo].[ff].NewColumn' , 'PassId', 'COLUMN';
© www.soinside.com 2019 - 2024. All rights reserved.