`

如何判断sql server数据库中的image,text,ntext类型字段是否为NULL?

阅读更多

      在sql server中,如果我们使用了image,text和ntext类型来存储数据的时候,如何来判断该字段是否含有数据值呢?在oracle中,我们可以通过设定blob类型的变量来直接查询,并判断其内容是否为NULL,但是在sql server中,我们不能通过直接设定image、text和ntext类型的变量来查询,然后再比较,因为这三种类型是不是可用的变量类型,找了很多方法,但是凡是涉及到字符串的函数都无能为力,最后找了一个一个系统函数DATALENGTH ( expression ),该函数直接获取表达式所占用的字节数,而且对上述三种类型都可以进行计算,于是问题解决了。

     看一个例子:

CREATE PROCEDURE [dbo].[sp_insertUpdateHotelIntroduction]
 @hotelID int,
 @introduction ntext  ,
 @introductionLenght int = 0,
 @pictureLen int =0,
    @pic  image
AS
BEGIN
 SET NOCOUNT ON;
 

     select @introductionLenght = DATALENGTH(TxtIntroduction) ,@pictureLen =DATALENGTH(picture) from hotels where   ID = @hotelID
 
    if ((@introductionLenght is  null)   and DATALENGTH(@introduction)>0)
  begin
   update hotels set TxtIntroduction = @introduction where ID =  @hotelID
  end


   if ((@pictureLen is  null)  and DATALENGTH(@pic)>0)
   begin
   update hotels set picture=@pic where ID = @hotelID
   end

    begin tran mytran
    declare @text_NeedInsert binary(16) -- 定义指针 
    Select @text_NeedInsert = TEXTPTR(TxtIntroduction) from Hotels with(nolock) where id = @hotelID --设置指针
    if @text_NeedInsert is not null
    begin
   
      WRITETEXT Hotels.TxtIntroduction @text_NeedInsert @introduction
    --updatetext Hotels.TxtIntroduction @text_NeedInsert 0 null  with log  @introduction
 
    end
   
            if @@error<>0
      begin
    rollback tran mytran
     end
   else
      begin
    commit tran mytran
      end

  if @pic is not null
      begin
  
    declare @ptr_NeedInsert binary(16) --定义指针
     
    Select @ptr_NeedInsert = TEXTPTR(Picture) from Hotels where id = @hotelID --设置指针
   
   
    WRITETEXT Hotels.Picture @ptr_NeedInsert @pic
   
  end

 

 


 
  -- update Hotels set TxtIntroduction = @introduction, Picture = @pic where id = @hotelID;其实只这句插入和修改都行了
 SET NOCOUNT OFF;
END

 


DATALENGTH表示的是字节数。nvarchar,ntext,text一个字符或中文就代表两个字节;

select   DataLength('abc阿阿') 为 7

LEN查出的是字数 

分享到:
评论

相关推荐

    sqlserver-oracle 数据类型对照

    - `text`和`ntext`在SQL Server中对应Oracle的`CLOB`和`NCLOB`,用于存储大量文本数据。 - `image`在SQL Server中对应Oracle的`BLOB`,用于存储二进制大数据。 接下来,我们讨论SQL Server和Oracle的函数对照: ...

    sqlServer 数据库存储图片与读取.rar

    在SQL Server数据库中存储图片是一种常见的需求,尤其是在开发包含多媒体数据的应用程序时。这篇文档将详细探讨如何在SQL Server中存储图片以及如何使用C#语言进行读取和下载操作。 首先,我们来看如何在SQL Server...

    如何在SQL Server 2000中处理text/image数据.pdf

    - 在SQL Server 2000中,BLOB被用来泛指text、ntext以及image类型的数据。 6. 处理text/image数据的注意事项和建议: - 在使用text、ntext、image数据类型时,需要考虑到排序规则和编码问题,尤其是当存储的数据...

    用VB6.0存取SQL Server 2000数据库中图像数据的方法.pdf

    根据提供的文件信息,本文将介绍使用Visual Basic 6.0(简称VB6.0)程序语言存取SQL Server 2000数据库中的图像数据的方法。这一技术应用主要分为存储机制、VB6.0中的实现方法以及操作步骤三个部分。 首先,了解SQL...

    SQLServer数据库基本知识点.docx

    8. **字符型(char、varchar、text、nchar、nvarchar、ntext)**:char和nchar为定长字符串,varchar和nvarchar为变长字符串,text和ntext用于大量文本存储。 9. **二进制数据类型(binary、varbinary、image)**:...

    基于SQL Server的Image数据类型存取技巧.pdf

    在探讨如何使用SQL Server中的Image数据类型进行图像数据存取之前,我们需要明确几个关键概念。首先,Image数据类型属于二进制大对象(BLOB)数据类型的一种,它可以存储超过标准字符限制(32KB)的二进制数据,最大...

    SQLServer2012数据库应用期末考试题.pdf

    17. 变量的数据类型不包括`table`,可以是基本类型如`int`, `varchar`等,或特定类型如`text`, `ntext`, `image`等。 18. `UPDATE`语句用于更新表中的数据,而非数据定义,`CREATE TABLE`, `CREATE CURSOR`, `ALTER...

    达梦数据库常用sql语句语法

    ### 达梦数据库常用SQL语句语法 #### 一、新建表 在达梦数据库中创建新表时,可以通过以下语法实现: ```sql CREATE TABLE [表名] ( [自动编号字段] INT IDENTITY(1,1) PRIMARY KEY, [字段1] NVARCHAR(50) ...

    用VB实现SQL Server中的图像数据的存取.pdf

    1. WRITETEXT:该函数用于向表中的image、text或ntext字段写入数据。它的基本语法结构是 WRITETEXT {table.column | view.column} text_ptr [WITH LOG] data,其中table.column | view.column指的是表或视图中的字段...

    Sql Server 和 Access 操作数据库结构Sql语句

    [字段7] IMAGE NULL -- 图像类型,在SQL Server 2008后被BLOB替代 ); ``` #### 二、删除表 删除表是另一种常见的操作。当不再需要某个表时,可以使用以下命令来删除它: ```sql DROP TABLE [表名]; ``` #### 三...

    SQL SERVER 2000开发与管理应用实例

    本书不但融合了作者在使用SQL Server 2000过程中遇到的各种常见问题和应用案例,还总结了作者几年来在CSDN 社区SQL Server版所解决的大量问题,面向实际项目需求,涉及不同类型的应用,能够多角度地引导读者学习相关...

    sql server学习资料

    NULL/NOT NULL约束决定字段是否允许为空,而其他完整性约束如PRIMARY KEY(主键约束)、UNIQUE(唯一约束)和FOREIGN KEY(外键约束)则确保数据的完整性。创建表时,可以使用CREATE TABLE语句,配合各种约束定义表...

    数据库建表操作SQL语句大全

    - **字段2**:类型为`ntext`,表示文本类型,`NULL`表示该字段允许为空。 - **字段3**:类型为`datetime`,表示日期时间类型。 - **字段4**:类型为`money`,表示货币类型,`NULL`表示该字段允许为空。 - **字段5**...

    SQL和Access操作数据库结构SQL语句

    例如,在SQL Server或Access中,我们可以创建一个名为`表名`的新表,其结构如下: ```sql CREATE TABLE 表名 ( 主键ID int IDENTITY(1,1) PRIMARY KEY, -- 定义主键,自动增长 字段1 nVarChar(50) DEFAULT '...

    JSP调用SQL Server的存储过程

    本文介绍了如何在JSP页面中调用SQL Server的存储过程,包括数据库表的创建、存储过程的定义及JSP页面的具体实现。这种方式可以提高代码的复用性和安全性,同时也简化了数据库操作的过程。在实际开发中,还可以结合...

    oracle和sql数据类型

    Oracle 和 SQL 数据类型是数据库管理系统中用于定义和存储数据的基础组件。它们决定了数据的结构、大小以及如何进行处理。以下是两种数据库系统中主要数据类型的详细比较: **Oracle 数据类型** 1. **Char**: Char...

    基于VB存取SQL Server图像数据的方法.pdf

    但当需要存储的图像数据超过这个大小限制时,SQL Server提供了能够存储每行高达2GB二进制对象(BLOB)的机制,这包括image、text和ntext三种数据类型。其中image数据类型专门用于存储二进制数据,其最大长度可以达到2,...

    sql2000数据库学习

    - 注意:在SQL Server中,TEXT, NTEXT, IMAGE类型字段不能直接用于GROUP BY子句中。 #### 数据库分离与附加 14. **分离数据库**: 使用`sp_detach_db`存储过程可以将数据库从SQL Server实例中分离出来。 - 附加...

    sqlserver2000基础(高手也有用)

    9.4.1 在Access数据库中实现与SQL Server之间的数据交换 288 9.4.2 实现客户端其他OLE DB数据源与SQL Server之间的数据交换 289 9.4.3 在客户端实现SQL Server数据导入与导出处理的一些说明 289 9.5 在数据库...

    sql大数据库期末考试地的题目及详解.docx

    10. **变量类型**:`table`不能作为变量的数据类型,而`text`、`ntext`和`image`是大数据类型的字段,而非变量类型。 11. **JOIN操作**:INNER JOIN返回两个表中匹配的行,形成交集。 12. **视图**:视图是虚拟表...

Global site tag (gtag.js) - Google Analytics