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

[经验分享] SQL Server中Text和varchar(max)数据类型区别

[复制链接]

尚未签到

发表于 2015-7-2 11:29:48 | 显示全部楼层 |阅读模式
    以前只知道text和image是可能被SQL Server淘汰的数据类型,但具体原因不太清楚,今天读书的时候发现了text与varchar(max)和nvarchar(max)的区别,主要是对操作符的限制,text只能被下列函数作用:
  
  函数语句  DATALENGTH
  READTEXT
  PATINDEX
  SET TEXTSIZE
  SUBSTRING
  UPDATETEXT
  TEXTPTR
  WRITETEXT
  TEXTVALID

  
  
  举个列子,如果“文本”这一列的数据类型为text,那么它将不能用于“=”“left()”等操作,比如下面的例子:
  建立表,填充数据:
if exists (select * from sysobjects where id = OBJECT_ID('[asdf]') and OBJECTPROPERTY(id, 'IsUserTable') = 1)

DROP TABLE [asdf]

CREATE TABLE [asdf] (

[inttest] [int] IDENTITY (1, 1) NOT NULL ,

[text] [text] NULL ,

[varcharmax] varchar(max) NULL )

ALTER TABLE [asdf] WITH NOCHECK ADD CONSTRAINT [PK_asdf] PRIMARY KEY NONCLUSTERED ( [inttest] )


SET IDENTITY_INSERT [asdf] ON


INSERT [asdf] ( [inttest] , [text] , [varcharmax] ) VALUES ( 1 , '1111111' , '1111111' )


SET IDENTITY_INSERT [asdf] OFF
  运行查询:
查询一:
SELECT [text]

      ,[varcharmax]

FROM [testDB].[dbo].[asdf]

where

[text] ='11111' AND

[varcharmax] = '1111111'


会出现以下错误提示:
消息402,级别16,状态1,第1 行

数据类型text 和varchar 在equal to 运算符中不兼容。
  查询二:
SELECT [text]
      ,[varcharmax]

FROM [testDB].[dbo].[asdf]

where

[varcharmax] = '1111111'


可以成功运行

  在MS SQL2005及以上的版本中,加入大值数据类型(varchar(max)、nvarchar(max)、varbinary(max) )。大值数据类型最多可以存储2^30-1个字节的数据。
  这几个数据类型在行为上和较小的数据类型 varcharnvarcharvarbinary 相同。
  微软的说法是用这个数据类型来代替之前的textntextimage 数据类型,它们之间的对应关系为:
  varchar(max)-------text;
  nvarchar(max)-----ntext;
  varbinary(max)----image.
  
  有了大值数据类型之后,在对大值数据操作的时候要比以前灵活的多了。比如:之前text是不能用‘like’的,有了varchar(max)之后就没有这些问题了,因为varchar(max)在行为上和varchar(n)上相同,所以,可以用在varcahr的都可以用在varchar(max)上。
  另外,这个还支持对插入的删除的表中的大值数据类型列引用上使用 AFTER 触发器。text就不行,总之,用了大值数据类型之后,我是“腰也不疼了,腿也不酸了,一口气也能上六楼了”。还等什么呢,快用大值类型吧。

运维网声明 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-82493-1-1.html 上篇帖子: SQL Server 2008 R2主数据服务安装 下篇帖子: 微软发布SQL Server 2000 Reporting Services Service Pack 1
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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