`

Sql Server2005 Transact-SQL 新兵器学习总结之-数据类型

阅读更多

sql server2005新增加了2大数据类型:

1.大值数据类型

2.xml

1.大值数据类型

Microsoft SQL Server 2005 中引入了 max 说明符。此说明符增强了 varcharnvarchar varbinary 数据类型的存储能力。varchar(max)nvarchar(max) varbinary(max) 统称为大值数据类型。您可以使用大值数据类型来存储最大为 2^31-1 个字节的数据。

 

大值数据类型和 SQL Server 早期版本中与之对应的数据类型之间的关系:

varchar(max)

text

nvarchar(max)

ntext

varbinary(max)

image

重要提示: 

Microsoft SQL Server 以后的版本中,将删除 ntexttext image 数据类型。请避免在新开发工作中使用这些数据类型,并考虑修改当前使用这些数据类型的应用程序。请改用 nvarchar(max)varchar(max) varbinary(max)

更新大值数据类型

UPDATE 语句支持 .WRITE( ) 子句对基础大值数据列进行部分更新。这类似于 SQL Server 早期版本中所支持的对 textntextimage 数据类型的文本指针操作、WRITETEXT UPDATETEX

使用 .WRITE (expression, @Offset, @Length) 子句执行对 varchar(max)nvarchar(max) varbinary(max) 等数据类型的部分或完整更新。

若要针对其他字符或二进制数据类型获得相同的 .WRITE 功能,可以使用 STUFF等字符函数

注意事项:
0@Offset 是基于零的序号位置.

1.不能使用 .WRITE 子句更新 NULL 列或将 column_name 的值设置为 NULL

Code
<!----> 1create table test1( ids int, DocumentSummary nvarchar(max))
 2go
 3select * from test1
 4go
 5insert into test1
 6select 1,null
 7go
 8select * from test1
 9go
10--错误不能使用.WRITE 子句更新NULL 列
11update test1
12set DocumentSummary.WRITE(N'abcdefg',0,NULL)
13
14--正确的
15update test1
16set DocumentSummary=N'abcdefg'
17select * from test1
18go
19

2.如果将 expression 设置为 NULL,则忽略 @Length,并将 column_name 中的值按指定的 @Offset 截断。

 

Code
<!---->1--把efg截断,得到abcd
2update test1
3set DocumentSummary.WRITE(Null , 4 ,0)
4select * from test1
5go
6

3.如果 @Offset NULL,则更新操作将在现有 column_name 值的结尾追加 expression,并忽略 @Length

 

Code
<!---->1-- 在结尾追加hi,得到abcdefghi
2update test1
3set DocumentSummary.WRITE('hi' , null ,0)
4select * from test1
5go
6
7

4.如果 @Length NULL,则更新操作将删除从 @Offset column_name 值的结尾的所有数据。

 

Code
<!---->1-- 得到ahi
2update test1
3set DocumentSummary.WRITE('hi' , 1 ,null)
4select * from test1
5go
6

 

2.xml

存储的 xml 数据类型表示实例大小不能超过 2 GB

 

Code
<!----> 1USE AdventureWorks;
 2GO
 3DECLARE @y xml (Sales.IndividualSurveySchemaCollection)
 4SET @y =  (SELECT TOP 1 Demographics FROM Sales.Individual);
 5SELECT @y;
 6GO
 7
 8
 9CREATE TABLE T(c1 int primary key, c2 xml)
10go
11DECLARE  @s varchar(100)
12SET @s = '<Cust><Fname>Andrew</Fname><Lname>Fuller</Lname></Cust>' 
13INSERT INTO T VALUES (3@s
14
15/**//*得到:
16<Cust>
17  <Fname>Andrew</Fname>
18  <Lname>Fuller</Lname>
19</Cust>
20*/

21select * from t
22



希望上面提到的知识对你有所提示
当然欢迎交流和指正
 
blog:
http://aierong.cnblogs.com/
author:aierong
email:aierong@126.com

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics