DECLARE @Blob VARBINARY(256) = CAST('SOMETHING' AS VARBINARY(256))
DECLARE @Var VARCHAR(256)
SELECT @Blob
上述查询的结果为0x534F4D455448494E47
SELECT @Var = CAST(@Blob AS varchar)
SELECT @Var
我想将参数(@Var
)中的@Blob
值保存为varchar
,但它只是简单地将其转换回"SOMETHING"。有解决这个问题的方法吗?
谢谢
就我个人而言,我只是将字节存储在数据库中,然后根据需要在应用程序中将其转换为十六进制,而不是将十六进制存储在数据库中。但是…
你将不能做varchar(256)
,因为如果你有256个十六进制字节,它将是双精度(512),加上前导0x
,如果你想,总共514个字符。
但是如果这是你想要的,看起来微软并没有给你一个内置的功能,但是他们确实提供了一个例子,在这里找到:
create procedure sp_hexadecimal
@binvalue varbinary(255)
as
declare @charvalue varchar(255)
declare @i int
declare @length int
declare @hexstring char(16)
select @charvalue = '0x'
select @i = 1
select @length = datalength(@binvalue)
select @hexstring = '0123456789abcdef'
while (@i <= @length)
begin
declare @tempint int
declare @firstint int
declare @secondint int
select @tempint = convert(int, substring(@binvalue,@i,1))
select @firstint = floor(@tempint/16)
select @secondint = @tempint - (@firstint*16)
select @charvalue = @charvalue +
substring(@hexstring, @firstint+1, 1) +
substring(@hexstring, @secondint+1, 1)
select @i = @i + 1
end
select 'sp_hexadecimal'=@charvalue