use*_*070 1 sql database sql-server-2008
我有一个表[password]存储列为nvarchar(max).我想把它转换成varbinary(max).
我创建了一个名为的新列,[temp]并将其声明为varbinary(max).然后我更新使用CONVERT:
update tempuser set [temp]=CONVERT(varbinary(max), CONVERT(nvarchar(max),[password]))
Run Code Online (Sandbox Code Playgroud)
现在在[temp]列中,值不同.例如,一个[password]以此开头的值:
0x3E6AFF88...
Run Code Online (Sandbox Code Playgroud)
[temp]中的相应条目以:
0x30783345...
Run Code Online (Sandbox Code Playgroud)
此外,当[password]是NULL,[temp]变成0x4E554C4C.
你正在转换一个看起来像二进制值的字符串,因为它开始于0x.不幸的是,这些不是一回事,并且为了让SQL Server理解你想要将字符串解释为直接转换的实际二进制值,而不是转换为其二进制表示的字符串,你需要使用样式参数:
UPDATE dbo.tempuser -- please always use the schema prefix
SET [temp] = CONVERT(VARBINARY(MAX), [password], 1); -- and semi-colons
Run Code Online (Sandbox Code Playgroud)
请注意,转换为NVARCHAR(MAX)to NVARCHAR(MAX)是不必要的.
现在,由于您NVARCHAR(MAX)出于某种原因选择了该列包含无法转换的垃圾,因此您可能会遇到此错误:
消息8114,级别16,状态5
将数据类型nvarchar转换为varbinary时出错.
在这种情况下,您需要找到不以0x(或以其他方式包含不合格字符)开头的值并修复它们.