您的位置:首页 > 数据库

SQL Server 2005 T-SQL增强功能(一)

2012-05-23 13:38 656 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: