原文:.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的函数例子:
注意:局部变量的类型是任何由系统提供的或用户定义的数据类型。变量不能是 text、ntext 或 image 数据类型,请在查询中直接使用。
/****** Object:  UserDefinedFunction [dbo].[FuncCompareImage]    Script Date: 2016-09-01 11:18:53 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[FuncCompareImage] ( @a1 IMAGE, @a2 IMAGE )
RETURNS INT
-- if match, return 1
AS
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类型数据的比较的更多相关文章

  1. SQL Server中Table字典数据的查询SQL示例代码

    SQL Server中Table字典数据的查询SQL示例代码 前言 在数据库系统原理与设计(第3版)教科书中这样写道: 数据库包含4类数据: 1.用户数据 2.元数据 3.索引 4.应用元数据 其中, ...

  2. 通过DBCC Page查看在SQL Server中哪行数据被锁住了?

    原文:通过DBCC Page查看在SQL Server中哪行数据被锁住了? 如何查看被锁的是哪行数据?通过dbcc page可以. 要想明白这个问题: 首先,需要模拟阻塞问题,这里直接模拟了阻塞问题的 ...

  3. 删除sql server中重复的数据

    原文:删除sql server中重复的数据 with list_numbers as( select Name, AuthorOrTime, Url, Price, EstimatePrice, Si ...

  4. sql Server中临时表与数据表的区别

    sql server 中临时表与数据表的区别 1.如何判断临时表和数据表已生成 --如何判断临时表是否已创建--- if exists(select * from tempdb..sysobjects ...

  5. 转:Sql Server中清空所有数据表中的记录

    如果要删除数据表中所有数据只要遍历一下数据库再删除就可以了,清除所有数据我们可以使用搜索出所有表名,构造为一条SQL语句进行清除了,这里我一一给各位同学介绍.   使用sql删除数据库中所有表是不难的 ...

  6. Sql Server中清空所有数据表中的记录

    Sql Server中清空所有数据表中的记录 清空所有数据表中的记录: 代码如下:exec sp_msforeachtable  @Command1 ='truncate table ?'删除所有数据 ...

  7. 从TXT文本文档向Sql Server中批量导入数据

    下面我们通过以下的简单的SQL语句即可实现数据的批量导入,代码如下: Bulk insert id From 'G:\文档\test.txt' With ( fieldterminator=',', ...

  8. SQL Server中批量替换数据

    SQL Server数据库中批量替换数据的方法 SQL Server数据库操作中,我们可能会根据某写需要去批量替换数据,那么如何批量修改替换数据呢?本文我们就介绍这一部分内容,接下来就让我们一起来了解 ...

  9. (4.31)sql server中的xml数据操作

    关键词:xml数据转为行列方式显示 常规案例: declare @data xml declare @h int set @data=' <bookstore> <row> & ...

随机推荐

  1. cocos2d ccmenulabel

    // // TestMenu.hpp // mario // // Created by sun on 15/12/22. // // #ifndef TestMenu_hpp #define Tes ...

  2. TYVJ P1036 统计数字 Label:坑!!!(用queue+map做出来的水)

    背景 NOIP2007年提高组第一题 描述 某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*109).已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数 ...

  3. JQuery图形插件,Highcharts平滑线条处理方法

    第一种:静态数据 $('#THChartDiv').highcharts({ chart: { type: 'spline' }, title: { text:过程线' }, xAxis: { tit ...

  4. linux-centos下源代码安装subversion (svn)

    1.svn的源代码 1.1 可以在官方下载,官方地址 :svn 1.6.17源码包  http://subversion.tigris.org/servlets/ProjectDocumentList ...

  5. html5调用手机摄像头,实现拍照上传功能

    今天做手机网站,想实现手机扫描二维码功能.首先实现在浏览器中调用手机摄像头,实现拍照功能并且把拍下的照片显示在页面并上传到服务器上,然后再在服务器端进行分析. 首先实现在浏览器中调用摄像头,当然用现在 ...

  6. 命令行编译运行Java

    首先要安装JDK,然后设置环境变量Path,添加C:\Program Files (x86)\Java\jdk1.8.0_66\bin 然后建立一个名为j.java的文件,里面加入如下代码: publ ...

  7. 找到n中最小的k个数

    题目:n个数中,求最小的前k个数. 这道题在各个地方都看到过,在国内出现的频率也非常高. 面完阿里回来听说这道题又被考了,所以还是决定回来写一写,对于这种高频题...顺便再吐槽一下阿里的面试,我竟然一 ...

  8. POJ 1988 Cube Stacking(带权并查集)

    Cube Stacking Time Limit: 2000MS   Memory Limit: 30000K Total Submissions: 23678   Accepted: 8299 Ca ...

  9. Android系统目录结构

    Android系统编译后生成三个映像文件,都是用cpio打包,gzip压缩的. ramdisk.img     文件系统,包含/system, /data, /bin等目录.kernel启动时负责初始 ...

  10. DS实验题 Searchname

    题目: 思路: 如果直接暴力搜索的话,时间复杂度为O(n*m),在n为百万量级的情况下,必然是T. 所以,这里通过hash函数,将字符串转换为对应的hash值:同时利用邻接表避免了hash冲突,方法是 ...