设为首页 收藏本站
查看: 678|回复: 0

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

[复制链接]

尚未签到

发表于 2016-11-7 09:43:04 | 显示全部楼层 |阅读模式
  在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查出的是字数 

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-296887-1-1.html 上篇帖子: 一个完整的SQL SERVER数据库全文索引的示例 下篇帖子: SQL SERVER索引优化系列之一:工作原理&聚簇索引|非聚簇索引
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表