Изменить колонку из NVARCHAR в NBINARY


Я случайно создал столбец с неправильным типом NVARCHAR (для хранения солей паролей), и я хочу преобразовать его в NVARBINARY.

Я пытался

ALTER TABLE [dbo].[TableName]
    ALTER COLUMN [ColumnName] [varbinary] (20) NOT NULL
GO

Но там написано

неявное преобразование типа данных nvarchar в varbinary не допускается. Используйте функцию CONVERT для выполнения этого запроса.

Есть ли способ сделать это? CONVERT, по-видимому, только для выражений, а не для изменений.

2 3

2 ответа:

Единственным путем изменения будет что-то вроде:

Create Table a (id int,blb Nvarchar(10))


insert into a Values
(1,'Test'),
(2,N'Test2');

BEGIN Transaction
ALTER TABLE a
ADD blb_New [varbinary] (20) NULL
GO

UPDATE a
SET blb_new = CAST(blb AS varbinary(20))
GO

ALTER TABLE a
DROP COLUMN blb
GO

EXEC sp_rename 'a.blb_new', 'blb', 'COLUMN'
GO
COMMIT Transaction


Select *,CAST(blb as Nvarchar(20)) from a

Drop Table a

Вы можете сначала преобразовать все значения из NVARCHAR в NVARBINARY в том же столбце. После преобразования всех значений используйте Alter table

Вы можете перейти по следующей ссылке: преобразование NVARCHAR (255) в DATE