SQL Server 2005 通过使用语法 (MAX) 引入 MAX 说明符,增强了变长数据类型 VARCHAR、NVARCHAR 和 VARBINARY 的能力。微软建议用VARCHAR(MAX)、NVARCHAR (MAX)和VARBINARY (MAX)数据类型取代text、ntext或image数据类型。
优点:
1:最多能保存2GB的数据
2:无须使用显式指针操作,因为 SQL Server 在内部确定何时以内联方式存储值以及何时使用指针。
3:能够对小型和大型数据使用统一的编程模型。带有 MAX 说明符的变长数据类型受到列、变量、参数、比较、触发器和所有字符串函数等的支持。
4:对于小于8K的数据, 相比text, ntext 和 image存取效率明显提高,可以使用.WRITE (expression, @Offset, @Length)进行更新。
为了从带有 MAX 说明符的动态列中读取块,可以按照与常规动态列相同的方式使用 SUBSTRING 函数。为了更新块,可以使用 UPDATE 语句的增强语法,它现在提供了 WRITE 方法。增强的 UPDATE 语句的语法为:
UPDATE table_name SET column_name.WRITE(@chunk, @offset, @len) WHERE ...
WRITE 方法从 @offset 位置移除 @len 字符,并且在该位置插入 @chunk。请注意,@offset 是从零开始的,意味着偏移量 0 表示 @chunk 中的第一个字符的位置。
例子:
CREATE TABLE TestMax ( ID INT NOT NULL PRIMARY KEY IDENTITY(1, 1) , txt_data VARCHAR(MAX) NULL , ntxt_data NVARCHAR(MAX) NULL , binary_data VARBINARY(MAX) NULL ) INSERT INTO dbo.TestMax ( txt_data, ntxt_data ) VALUES ( 'txt no use', N'ntxt' ) SELECT * FROM TestMax
-- 下面语句将no use 替换为adddata -- txt_data 列的结果为txt adddata UPDATE dbo.TestMax SET txt_data.WRITE('adddata', 4, 6) WHERE ID = 1 --当 @chunk 为 NULL 时,@len 被忽略,并且值在 @offset 位置截断。 --以下语句移除了从偏移量 3 直到结尾的所有数据 --txt_data 列的结果为txt UPDATE dbo.TestMax SET txt_data.WRITE(NULL, 3, 0) WHERE ID = 1 --当 @len 为 NULL 时,从 @offset 到结尾的所有字符都被移除,并且 @chunk 被追加。 --以下语句移除了从偏移量 2 直到结尾的所有数据 --txt_data 列的结果为txappenddata UPDATE dbo.TestMax SET txt_data.WRITE('appenddata', 2, NULL) WHERE ID = 1 --当 @offset 为 NULL 时,@len 被忽略,并且在结尾追加了 @chunk。 --以下语句在结尾追加了字符串'hello' --txt_data 列的结果为txappenddatahello UPDATE dbo.TestMax SET txt_data.WRITE('hello',NULL,NULL) WHERE ID = 1