当前位置: 首页 > 面试题库 >

varbinary到varchar,不包含master.dbo.fn_varbintohexstr

牟辰龙
2023-03-14
问题内容

有没有办法在MS SQL Server
2005上没有master.dbo.fn_varbintohexstr函数的情况下将varbinary转换为ASCII
varchar字符串(base64,md5,sha1-没关系)?因为它不能在计算列内部使用。

CONVERT和CAST返回非ASCII字符串。

谢谢,


问题答案:

对于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

使用哈希字节和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)


 类似资料:
  • 问题内容: 各自的优缺点是什么? 我的要求是: 我希望能够加密图像 可以通过Web服务器(RESTful API)在移动设备上轻松访问 可通过本地数据库(如SQLLite)在移动设备上轻松访问 服务器端使用的数据库是MS SQL2005。我相信SQLLite和MS SQL 2005可以同时支持varchar和varbinary(sqllite上的BLOB) 问题答案: Base64在一个字节中仅使

  • 问题内容: 不久前,我问了一个有关SQL Server中的层次结构/版本号排序的问题。( 如何使用SQL Server查询一般地对“版本号”列进行排序 )。 在提交的答案中,有一个与TSQL编码挑战的链接与此相似。 在SQL2000解决方案中,作者演示了两种变体,一种使用并返回varchar,另一种使用varbinary。作者解释说他正在这样做,而没有解释为什么。 因此,我的问题是,方法上的主要区

  • 问题内容: 我正在运行一个简单的服务器 当我向主页发出GET请求时,运行时将引发以下错误 我不明白这个错误。有任何想法吗?我正在Cloud9中工作。 我的目录结构是 问题答案: 包含路径是相对的,您需要更新路径以包含“ partials”子文件夹,例如 查看文档

  • 正在寻找旧JSF页面的解决方案。我试图使用contains方法根据另一列是否包含单词red box来呈现组合框。 这一个工作和组合框被禁用。 但是,我也想在值不包含红色框时渲染它们,但随后将启用combox。 这是行不通的。 因此,我如何测试的任何想法都不包含特定的单词。我还尝试了choose test when,但由于第一个表。col4值只是一个空字符串。 有什么想法吗?谢谢。

  • 问题内容: 我得到一个在一个表上(重复键)违反唯一性约束。本质上,我的表如下所示: 唯一性约束在上;也就是说,没有2条记录可以具有相同的日期/时间“时间戳”。 在将记录插入该表如下所示: 因此,您可以看到我正在使用(“现在”)并将其转换为实例。 我看到的确切错误(重复键)一直抱怨我试图将其插入表中,但该错误已经存在。因此,很明显,我使用了错误的Date API,并且插入了具有无效时间成分的日期,从

  • 本文向大家介绍找出varchar在MySQL中是否包含百分号?,包括了找出varchar在MySQL中是否包含百分号?的使用技巧和注意事项,需要的朋友参考一下 要在MySQL中找出包含百分号的varchar,可以使用LIKE运算符。语法如下- 为了理解上述语法,让我们创建一个表。创建表的查询如下- 使用insert命令插入一些带有%符号的记录。查询如下- 使用select语句显示表中的所有记录。查