varbinary到varchar,不包含master.dbo.fn_varbintohexstr
技术问答
219 人阅读
|
0 人回复
|
2023-09-13
|
有没有办法在MS SQL Server% d* [8 ]( v# t
2005上没有master.dbo.fn_varbintohexstr函数的情况下将varbinary转换为ASCII
$ I: K& H4 e; ~$ I, xvarchar字符串(base64,md5,sha1-没关系)?因为它不能在计算列内部使用。4 |& H6 [( U. d4 B$ r( \" `4 W
CONVERT和CAST返回非ASCII字符串。6 @8 Z3 D$ M. @# Y
谢谢,
+ p7 R. g1 {+ |# ]) Z) o ^- A2 u! r; h- U0 O! v; C
解决方案:8 z' M: V* w9 i0 q# t/ |$ q
" s% I, E: I# c3 s
, o) H7 [3 Z+ o0 t8 T
0 m/ _9 J' p( ^! u 对于md5和sha1,您可以使用hashbytes。要获取base64,您可以创建一个进行转换的udf,并在您的计算列中使用它。, g* M& c" P1 K' o) `- j% x
函数BinToBase64:
* V+ b- I V% H8 \" Hcreate function BinToBase64(@Bin varbinary(max)) returns varchar(max) as! J. }/ I v# N5 C
begin
* C! N3 K4 c) T/ i return CAST(N'' AS XML).value('xs:base64Binary(xs:hexBinary(sql:variable("@Bin")))', 'VARCHAR(MAX)')6 k4 K$ D$ e ~7 n6 ~' F( J% J
end
* J5 P+ I( O8 n: V2 O; z5 x函数BinToHexString:
1 E: s; V' I" X9 q6 ]. I) Ncreate function BinToHexString(@Bin varbinary(max)) returns varchar(max) as3 G2 J5 Z0 k5 Q D5 O" q0 d2 O
begin- u; r9 I7 {) a, _, R
return '0x' + cast('' as xml).value('xs:hexBinary(sql:variable("@Bin") )', 'varchar(max)'); . K% g' W4 g" w5 X6 N
end
2 R! X9 ]5 G/ G# y像这样使用:
* b" M9 G0 o3 `3 z' s, Mcreate table TestTable
. x, X! r3 m. @( C(
8 Z- ]' A5 N: n Col1 varbinary(max),
$ ^- L4 |6 X( B) ^. ` Col2 as dbo.BinToHexString(hashbytes('MD5', Col1)),
- h" `/ e: k( ]7 }+ }' }& t0 _$ n: b) ` Col3 as dbo.BinToHexString(hashbytes('SHA1', Col1)),
5 A9 E$ j( P6 d1 ^$ | Col4 as dbo.BinToBase64(Col1),
$ _6 N; j8 t1 l' U6 A0 g2 W) `2 w)- g7 d" D) i2 l' `
insert into TestTable values (12345)
& [+ a0 W# ^ r: iselect *! k. o7 g8 @1 p9 n" }% S, n; r
from TestTable
# F1 E6 |8 o9 T7 N5 U使用哈希字节和uniqueidentifier列的唯一约束varbinary列
) n/ L+ `4 D" V i; C1 K! e/ L& Vcreate table TestTable / b- Z Y" G& ~, [4 Z
($ [7 r8 F4 k g* c6 H
ID uniqueidentifier default(newid()),
. w* b5 u# o( u1 J c& C$ j Col1 varbinary(max), $ _4 C& a8 q) y; g4 @% \* F
Col2 as coalesce(hashbytes('MD5', Col1), cast(ID as varbinary(8000))) persisted- i5 s* V( I6 ?
)& u, ^( ?) B2 n
create unique index IX_TestTable_Col2 on TestTable(Col2) |
|
|
|
|
|