2010-10-25 60 views
3

我在写一个select语句来比较t-sql中的两个类型为image的值时遇到了很多麻烦。这是我到目前为止:如何在SQL Server中比较图像数据类型

SELECT a.UserId, b.UserId 
FROM [dbo].[aspnet_Profile] as a inner join [dbo].[aspnet_Profile] as b on 
    (a.UserId = <some string> AND b.UserId = <some other string>) 
WHERE BINARY_CHECKSUM(a.PropertyValuesBinary) = BINARY_CHECKSUM(b.PropertyValuesBinary) 

但我不断收到错误消息,无论我对WHERE子句做什么。对于上面的查询,我得到的错误消息是:

binarychecksum中的错误。在 binarychecksum输入中没有 类似的列。

无论如何,任何帮助将非常感激。我有一个非常艰难的时间做任何与此数据类型,出于某种原因...

BTW:我使用的是SQL Server的网络(我认为这是2008年版)...

谢谢!

Andrew

回答

0

你能这样做吗?

select BINARY_CHECKSUM(A.PropertyValuesBinary) from aspnet_Profile as A 

了解错误信息的#将帮助我们帮助您。

+0

您好,蒂姆,感谢您的想法。使用上面的select语句得到的错误消息是: – Andrew 2010-10-25 16:04:31

+0

Msg 8184,级别16,状态1,行1 binarychecksum中的错误。在binarychecksum输入中没有可比较的列。 – Andrew 2010-10-25 16:05:02

1

不能对图像类型使用binarychecksum

BINARY_CHECKSUM忽略其 计算 不可比数据类型的列。不可比较的数据类型 包括文本,ntext,图像,光标, xml和不可比较的通用语言 运行时(CLR)用户定义的类型。

http://msdn.microsoft.com/en-us/library/ms173784.aspx

这可能是更容易存储MD5沿着与图像。我无法想象你通过请求所有图像的binary_checksum获得了良好的性能!

+0

感谢您的提示,亚当。我正在使用Sql Server Management Studio,我只想比较表中的两个值。这是一次性计算,它不是任何代码的一部分。有没有办法在t-sql中做到这一点,而不需要下载任何MD5的外部实现? t-sql是否实现MD5?我不是一个真正的DBA或任何东西...... – Andrew 2010-10-25 16:20:14