首页 > 代码库 > .SQL Server中 image类型数据的比较
.SQL Server中 image类型数据的比较
原文:.SQL Server中 image类型数据的比较
在SQL Server中如果你对text、ntext或者image数据类型的数据进行比较。将会提示:不能比较或排序 text、ntext 和 image 数据类型,除非使用 IS NULL 或 LIKE 运算符。不过image也是不支持like比较的。
那怎么样对数据库中的图片做比较呢。
对于这种大型对象的处理,在Oracle中有有专门的函数DBMS_LOB.COMPARE,而SQLSERVER中没有专门的处理函数,
只能通过使用substring函数一段一段的从image数据中截取放到varbinary类型数据,最长8060字节(8k),
然后再对varbinary类型数据进行比较。以下是一个比较image的函数例子:
那怎么样对数据库中的图片做比较呢。
对于这种大型对象的处理,在Oracle中有有专门的函数DBMS_LOB.COMPARE,而SQLSERVER中没有专门的处理函数,
只能通过使用substring函数一段一段的从image数据中截取放到varbinary类型数据,最长8060字节(8k),
然后再对varbinary类型数据进行比较。以下是一个比较image的函数例子:
注意:局部变量的类型是任何由系统提供的或用户定义的数据类型。变量不能是 text、ntext 或 image 数据类型,请在查询中直接使用。
/****** Object: UserDefinedFunction [dbo].[FuncCompareImage] Script Date: 2016-09-01 11:18:53 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOALTER FUNCTION [dbo].[FuncCompareImage] ( @a1 IMAGE, @a2 IMAGE )RETURNS INT-- if match, return 1AS BEGIN DECLARE @n INT , @i INT , @j INT; DECLARE @b1 VARBINARY(8000) , @b2 VARBINARY(8000); SET @n = 1; IF DATALENGTH(@a1) <> DATALENGTH(@a2) -- different length SET @n = 0; ELSE BEGIN SET @i = 0; SET @j = ( DATALENGTH(@a1) - 1 ) / 8000 + 1; WHILE @i <= @j BEGIN SET @b1 = SUBSTRING(@a1, @i * 8000 + 1, CASE @i WHEN @j THEN DATALENGTH(@a1) % 8000 ELSE 8000 END); SET @b2 = SUBSTRING(@a2, @i * 8000 + 1, CASE @i WHEN @j THEN DATALENGTH(@a2) % 8000 ELSE 8000 END); IF @b1 <> @b2 BEGIN SET @n = 0; BREAK; END; SET @i = @i + 1; END; END; RETURN(@n); END;
.SQL Server中 image类型数据的比较
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。