如何在SQL Server中从包含二进制文字的字符串变量中设置二进制值?

时间:2019-01-14 17:14:39

标签: sql sql-server tsql

我有一个表,其中有一列二进制文字转换为字符串,我需要将其与包含与binary(16)相同值的表相关联

根表字符串值'2F774578C33011E880D80050569C29CA'

表值我需要加入0x2F774578C33011E880D80050569C29CA

有没有一种方法可以将根表转换为二进制文件,方法是简单地将0x添加到字符串,然后为字符串声明二进制的文字值?或将二进制文件转换为根目录中包含的字符串。

我没有运气就尝试了以下方法:

DECLARE @jobIDBinary Binary(16) 
DECLARE @jobString Nvarchar(50) 

SET @jobIDBinary = '0x'+
(SELECT TOP (1) JobId

FROM  [Record]) 

错误:不允许从数据类型nvarchar隐式转换为二进制。使用CONVERT函数运行此查询。

我还尝试了另一种转换方式:

 DECLARE @convo varchar(max) 
 SET @convo = (SELECT TOP (1)
 [BinaryJobID]
 FROM [GAPClaims].[dbo].[Record2]

 WHERE binaryjobId IS NOT NULL ) 

Results =,]óJ¾¶‡Á§\ê€

提前谢谢。

2 个答案:

答案 0 :(得分:1)

您可以将a_split转换为varbinary,然后加入(或根据您的说明进行关联)。

varchar

那么,对你来说:

declare @v varbinary(16) = 0x2F774578C33011E880D80050569C29CA
select @v, convert(varchar(256), @v,2)

declare @s varchar(256) = '2F774578C33011E880D80050569C29CA'
select @s, convert(varbinary(16),@s,2)

有关在 DECLARE @convo varchar(max) SET @convo = (SELECT TOP (1) convert(varchar(256),[BinaryJobID],2) FROM [GAPClaims].[dbo].[Record2] WHERE binaryjobId IS NOT NULL ) 语句中为什么使用2的原因,请参见Binary section in the docs

答案 1 :(得分:0)

尝试将字符串转换为二进制:

CONVERT(BINARY(16), @jobString)

和反向:

CONVERT(VARCHAR(max), @jobBinary)