将列从NVARCHAR更改为BINARY

时间:2013-01-13 16:03:59

标签: sql-server sql-server-2008-r2

我不小心创建了一个类型为NVARCHAR的列(用于存储密码盐),我想将其转换为NVARBINARY

我试过

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

但它说

  

不允许从数据类型nvarchar到varbinary的隐式转换。使用CONVERT函数运行此查询。

有办法吗? CONVERT似乎仅用于表达,而不是用于更改。

2 个答案:

答案 0 :(得分:3)

改变的唯一方法是:

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

答案 1 :(得分:0)

您可以先在同一列中将所有值从NVARCHAR转换为NVARBINARY。 转换所有值后,使用Alter表

您可以参考以下链接: Converting NVARCHAR(255) to DATE