Imp*_*ert 2 sql sql-server stored-procedures hashbytes
我编写了一个存储过程来散列某个列的值.我需要在CASE WHEN或IIF语句中使用此HASHBYTES函数,如下所示:
DECLARE @Hash varchar(255) = 'testvalue'
SELECT IIF(1=1, HASHBYTES('SHA1',@Hash), @Hash)
SELECT CASE WHEN 1=1 THEN HASHBYTES('SHA1',@Hash) END AS Hashcolumn
Run Code Online (Sandbox Code Playgroud)
我无法理解为什么我从上面的查询得到不同的输出?似乎每当我在CASE WHEN/IIF语句中添加一个ELSE时,它都会返回一串奇怪的字符(ü<þ+OUL'RDOk{\Ìø如上例所示).
谁能告诉我为什么会这样?我需要使用CASE WHEN或IIF.
多谢你们
IIF返回true_value和false_value中具有最高优先级的数据类型.在这种情况下,它@Hash1是varchar(255)你的结果是如此投射到varchar(255).见下文.
DECLARE @Hash varchar(255) = 'testvalue'
SELECT cast(HASHBYTES('SHA1',@Hash) as varchar(255))
Run Code Online (Sandbox Code Playgroud)
同样,CASE工作方式相同.但是,如果您不添加与数据类型冲突的一个ELSE或另一个WHEN,它将起作用.这是因为ELSE NULL暗示了.即
SELECT CASE WHEN 1=1 THEN HASHBYTES('SHA1',@Hash) END
Run Code Online (Sandbox Code Playgroud)
但是,如果您添加另一个检查,则优先级将启动,并且将进行转换.
SELECT CASE WHEN 1=1 THEN HASHBYTES('SHA1',@Hash) WHEN 1=2 THEN @Hash END AS Hashcolumn
SELECT CASE WHEN 1=1 THEN HASHBYTES('SHA1',@Hash) ELSE @Hash END AS Hashcolumn
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
274 次 |
| 最近记录: |