在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的函數例子:
IF object_id('compare_image') IS NOT NULL DROP FUNCTION compare_imageGOcreate function compare_image(@a1 image, @a2 image) returns int-- if match, return 1asbegindeclare @n int, @i int, @j intdeclare @b1 varbinary(8000), @b2 varbinary(8000)set @n = 1if datalength(@a1) <> datalength(@a2) -- different lengthset @n = 0elsebeginset @i = 0set @j = (datalength(@a1) - 1) / 8000 + 1while @i <= @jbeginset @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 <> @b2beginset @n = 0breakend set @i = @i + 1end endreturn(@n)endgo
內容來自本人QQ空間於2009-6-17 16:10發表的日誌。。 網轉。