7

MS SQL Server 2005でmaster.dbo.fn_varbintohexstr関数を使用せずに、varbinaryをASCII varchar文字列(base64、md5、sha1-に関係なく)に変換する方法はありますか?計算列内では使用できないためです。

CONVERTとCASTは非ASCII文字列を返します。

ありがとうございました、

デニス。

4

1 に答える 1

4

md5 と sha1 の場合、hashbytesを使用できます。base64 を取得するには、変換を行う udf を作成し、それを計算列で使用できます。

関数 BinToBase64:

create function BinToBase64(@Bin varbinary(max)) returns varchar(max) as
begin
  return CAST(N'' AS XML).value('xs:base64Binary(xs:hexBinary(sql:variable("@Bin")))', 'VARCHAR(MAX)')
end

関数 BinToHexString:

create function BinToHexString(@Bin varbinary(max)) returns varchar(max) as
begin
  return '0x' + cast('' as xml).value('xs:hexBinary(sql:variable("@Bin") )', 'varchar(max)'); 
end

次のように使用します。

create table TestTable 
(
  Col1 varbinary(max), 
  Col2 as dbo.BinToHexString(hashbytes('MD5', Col1)),
  Col3 as dbo.BinToHexString(hashbytes('SHA1', Col1)),
  Col4 as dbo.BinToBase64(Col1),
)
insert into TestTable values (12345)

select *
from TestTable

hashbytes と uniqueidentifier 列を使用した一意制約 varbinary 列

create table TestTable 
(
  ID uniqueidentifier default(newid()),
  Col1 varbinary(max), 
  Col2 as coalesce(hashbytes('MD5', Col1), cast(ID as varbinary(8000))) persisted
)

create unique index IX_TestTable_Col2 on TestTable(Col2)
于 2011-07-09T20:52:05.647 に答える