2013-07-26 26 views
-1

我有这样的选择查询,让输出“0x38F0A2D294A4AEBD1648C952D910AC51C40FE7”VARBINARY不是在where子句

SELECT HASHBYTES ('SHA1',CAST(54 AS varchar)+CAST(1 AS varchar) 
+CAST('2013-07-26 16:30:49.9786317' AS varchar)+CAST(1 AS varchar)) 

即使知道我不会是什么SQL服务器无法列与值进行比较正确地将工作。我这样做:

SELECT 'Worked!' 
WHERE HASHBYTES ('SHA1',CAST(54 AS varchar)+CAST(1 AS varchar)+ 
CAST('2013-07-26 16:30:49.9786317' AS varchar)+CAST(1 AS varchar))=0x38F0A2D294A4AEBD1648C952D910AC51C40FE7 

这根本行不通。奇怪的是,当值不同时,它适用于其他情况。

+2

不回答你的问题,但[请不要使用'不长varchar'(http://sqlblog.com/blogs/aaron_bertrand/archive/2009/ 10月9日/坏习惯,对开球声明,VARCHAR,而无需-length.aspx)。 –

回答

0

试试这个:

declare @Hashthis nvarchar(2000) 
SELECT @Hashthis=HASHBYTES ('SHA1',CAST(54 AS varchar)+CAST(1 AS varchar) 
+CAST('2013-07-26 16:30:49.9786317' AS varchar)+CAST(1 AS varchar)) 

SELECT 'Worked' where HASHBYTES ('SHA1',CAST(54 AS varchar)+CAST(1 AS varchar) 
+CAST('2013-07-26 16:30:49.9786317' AS varchar)+CAST(1 AS varchar))[email protected] 
+0

它确实有效。但有人可以告诉我为什么它的剂量是以另一种方式工作的?这种方式剂量有性能问题? – Higarian

+0

要坚持。谢谢! – Higarian