吴贺华 发表于 2015-7-2 11:29:48

SQL Server中Text和varchar(max)数据类型区别

  以前只知道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('') and OBJECTPROPERTY(id, 'IsUserTable') = 1)
DROP TABLE
CREATE TABLE (
IDENTITY (1, 1) NOT NULL ,
NULL ,
varchar(max) NULL )
ALTER TABLE WITH NOCHECK ADD CONSTRAINT PRIMARY KEY NONCLUSTERED ( )

SET IDENTITY_INSERT ON

INSERT ( , , ) VALUES ( 1 , '1111111' , '1111111' )

SET IDENTITY_INSERT OFF
  运行查询:
查询一:
SELECT
      ,
FROM ..
where
='11111' AND
= '1111111'

会出现以下错误提示:
消息402,级别16,状态1,第1 行
数据类型text 和varchar 在equal to 运算符中不兼容。
  查询二:
SELECT
      ,
FROM ..
where
= '1111111'

可以成功运行

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