1、varchar(max)nvarchar(max)varbinary(max)数据型最多可以保存2GB的数据,可以取代textntextimage数据型。

SQLServer2005中的T-SQL增强CREATE TABLE myTable
SQLServer2005中的T-SQL增强(
SQLServer2005中的T-SQL增强    id 
INT
,
SQLServer2005中的T-SQL增强    content 
VARCHAR(MAX
)
SQLServer2005中的T-SQL增强)
SQLServer2005中的T-SQL增强

2XML数据
XML
数据型允SQL Server数据中保存XML片段或文档。

错误处 Error Handling

1、新的异常
2、可以捕去会致批止的错误
前提是错误不会接中断(通常是重程度21以上的错误,例如,表或数据完整性可疑、硬件错误等等。)。
3TRY/CATCH 构造

SQLServer2005中的T-SQL增强SET XACT_ABORT ON
SQLServer2005中的T-SQL增强   
BEGIN TRY
SQLServer2005中的T-SQL增强     
<core logic>
SQLServer2005中的T-SQL增强   
END TRY
SQLServer2005中的T-SQL增强   
BEGIN CATCH TRAN_ABORT
SQLServer2005中的T-SQL增强     
<exception handling logic>
SQLServer2005中的T-SQL增强   
END TRY
SQLServer2005中的T-SQL增强
SQLServer2005中的T-SQL增强
@@error may be quired as first statement in CATCH block

4、演示代

SQLServer2005中的T-SQL增强USE demo
SQLServer2005中的T-SQL增强  
GO
SQLServer2005中的T-SQL增强  
--创建工作表
SQLServer2005中的T-SQL增强

SQLServer2005中的T-SQL增强  
CREATE TABLE student
SQLServer2005中的T-SQL增强  ( 
SQLServer2005中的T-SQL增强      stuid 
INT NOT NULL PRIMARY KEY,
SQLServer2005中的T-SQL增强      stuname 
VARCHAR(50)
SQLServer2005中的T-SQL增强  )
SQLServer2005中的T-SQL增强
SQLServer2005中的T-SQL增强  
CREATE TABLE score 
SQLServer2005中的T-SQL增强  (
SQLServer2005中的T-SQL增强      stuid 
INT NOT NULL REFERENCES student(stuid),
SQLServer2005中的T-SQL增强      score 
INT
SQLServer2005中的T-SQL增强  )
SQLServer2005中的T-SQL增强
GO
SQLServer2005中的T-SQL增强
SQLServer2005中的T-SQL增强
INSERT INTO student VALUES (101,'zhangsan'
SQLServer2005中的T-SQL增强
INSERT INTO student VALUES (102,'wangwu'
SQLServer2005中的T-SQL增强
INSERT INTO student VALUES (103,'lishi'
SQLServer2005中的T-SQL增强
INSERT INTO student VALUES (104,'maliu'
SQLServer2005中的T-SQL增强
SQLServer2005中的T-SQL增强
--调用一个运行时错误
SQLServer2005中的T-SQL增强
SET XACT_ABORT OFF
SQLServer2005中的T-SQL增强  
BEGIN TRAN
SQLServer2005中的T-SQL增强     
INSERT INTO score VALUES (101,90)
SQLServer2005中的T-SQL增强     
INSERT INTO score VALUES (102,78
GO

快照隔离 Snapshot Isolation

1、写入程序不会阻碍取程序
2
Snapshot isolation must be enabled for DB
      ALTER DATABASE
数据
SET allow_snapshot_isolation ON
3
Snapshot isolation must be enabled for connection
      Set transaction isolation level snapshot
4
UPDATE transactions keep old versions of data in a linked list
5
、新的隔离级别提供了以下点:

  1) 提高了只读应用程序的数据可用性
  2) OLTP境中行非阻止取操作
  3) 写入事务进行自制冲突检测
6
、演示代

SQLServer2005中的T-SQL增强CREATE DATABASE demo2
SQLServer2005中的T-SQL增强
GO
SQLServer2005中的T-SQL增强
USE demo2
SQLServer2005中的T-SQL增强   
ALTER DATABASE demo2 SET allow_snapshot_isolation ON
SQLServer2005中的T-SQL增强   
CREATE TABLE test
SQLServer2005中的T-SQL增强   ( 
SQLServer2005中的T-SQL增强     tid 
INT NOT NULL primary key,
SQLServer2005中的T-SQL增强     tname 
VARCHAR(50NOT NULL
SQLServer2005中的T-SQL增强   )
SQLServer2005中的T-SQL增强  
INSERT INTO test VALUES(1,'version1')
SQLServer2005中的T-SQL增强  
INSERT INTO test VALUES(2,'version2')
SQLServer2005中的T-SQL增强
SQLServer2005中的T-SQL增强
--连接一
SQLServer2005中的T-SQL增强

SQLServer2005中的T-SQL增强
USE demo2
SQLServer2005中的T-SQL增强
BEGIN TRAN
SQLServer2005中的T-SQL增强   
UPDATE test SET tname='version3' WHERE tid=2
SQLServer2005中的T-SQL增强   
SELECT * FROM test
SQLServer2005中的T-SQL增强
SQLServer2005中的T-SQL增强
--连接二
SQLServer2005中的T-SQL增强
USE demo2
SQLServer2005中的T-SQL增强   
SET transaction isolation level snapshot
SQLServer2005中的T-SQL增强   
SELECT * FROM test 

TOP 功能

1TOP
可以指定一个数字表达式,以返回要通过查询影响的行数或百分比,可以根据情况使用量或子查询
可以在DELETEUPDATEINSERT查询中使用TOP选项

2、更好地替SET ROWCOUNT选项,使之更有效。

OUTPUT

1SQL Server 2005引入一个新的OUTPUT子句,以使您可以冲修改(INSERTUPDATEDELETE)中将数据返回到表量中。

2、新的OUTPUT子局的

SQLServer2005中的T-SQL增强OUTPUT <dml_select_list> INTO @table_variable

可以通引用插入的表或除的表来访问被修改的行的旧/新影象,其方式与访问似。在INSERT句中,只能访问插入的表。DELETE句中,只能访问删除的表。在UPDATE句中,可以访问插入的表除的表。

3、代演示

SQLServer2005中的T-SQL增强USE demo
SQLServer2005中的T-SQL增强
GO
SQLServer2005中的T-SQL增强
CREATE TABLE tt 
SQLServer2005中的T-SQL增强(
SQLServer2005中的T-SQL增强  id 
INT IDENTITY
SQLServer2005中的T-SQL增强  c1 
VARCHAR(15)
SQLServer2005中的T-SQL增强)
SQLServer2005中的T-SQL增强
GO
SQLServer2005中的T-SQL增强
SQLServer2005中的T-SQL增强
INSERT INTO tt VALUES ('r1')
SQLServer2005中的T-SQL增强
INSERT INTO tt VALUES ('r2')
SQLServer2005中的T-SQL增强
INSERT INTO tt VALUES ('r5')
SQLServer2005中的T-SQL增强
INSERT INTO tt VALUES ('r6')
SQLServer2005中的T-SQL增强
INSERT INTO tt VALUES ('r7')
SQLServer2005中的T-SQL增强
INSERT INTO tt VALUES ('r8')
SQLServer2005中的T-SQL增强
INSERT INTO tt VALUES ('r9')
SQLServer2005中的T-SQL增强
INSERT INTO tt VALUES ('r10')
SQLServer2005中的T-SQL增强
SQLServer2005中的T-SQL增强
DECLARE @del AS TABLE (deletedId INT, deletedValue VARCHAR(15))
SQLServer2005中的T-SQL增强
DELETE tt
SQLServer2005中的T-SQL增强OUTPUT DELETED.id, DELETED.c1 
INTO @del
SQLServer2005中的T-SQL增强
WHERE id < 3
SQLServer2005中的T-SQL增强
SELECT * FROM @del
SQLServer2005中的T-SQL增强
GO
SQLServer2005中的T-SQL增强
-----------------------------------------------
SQLServer2005中的T-SQL增强
USE demo
SQLServer2005中的T-SQL增强
GO
SQLServer2005中的T-SQL增强
CREATE TABLE toptest (column1 VARCHAR(150))
SQLServer2005中的T-SQL增强
GO
SQLServer2005中的T-SQL增强
INSERT INTO toptest VALUES('t1')
SQLServer2005中的T-SQL增强
INSERT INTO toptest VALUES('t2')
SQLServer2005中的T-SQL增强
INSERT INTO toptest VALUES('t3')
SQLServer2005中的T-SQL增强
INSERT INTO toptest VALUES('t4')
SQLServer2005中的T-SQL增强
INSERT INTO toptest VALUES('t5')
SQLServer2005中的T-SQL增强
INSERT INTO toptest VALUES('t6')
SQLServer2005中的T-SQL增强
INSERT INTO toptest VALUES('t7')
SQLServer2005中的T-SQL增强
INSERT INTO toptest VALUES('t8')
SQLServer2005中的T-SQL增强
SELECT * FROM toptest
SQLServer2005中的T-SQL增强
GO
SQLServer2005中的T-SQL增强
SQLServer2005中的T-SQL增强
CREATE TABLE toptest2 (column2 VARCHAR(150))
SQLServer2005中的T-SQL增强
GO
SQLServer2005中的T-SQL增强
INSERT INTO toptest2 VALUES('c1')
SQLServer2005中的T-SQL增强
INSERT INTO toptest2 VALUES('c2')
SQLServer2005中的T-SQL增强
SQLServer2005中的T-SQL增强
--声明3个变量
SQLServer2005中的T-SQL增强
DECLARE @a INT
SQLServer2005中的T-SQL增强
DECLARE @b INT
SQLServer2005中的T-SQL增强
DECLARE @c INT
SQLServer2005中的T-SQL增强
SQLServer2005中的T-SQL增强
--赋值
SQLServer2005中的T-SQL增强
SET @a = 10
SQLServer2005中的T-SQL增强
SET @b = 5
SQLServer2005中的T-SQL增强
SELECT @c = @a/@b
SQLServer2005中的T-SQL增强
SQLServer2005中的T-SQL增强
--使用计算表达式
SQLServer2005中的T-SQL增强
SELECT TOP(@c* FROM toptest
SQLServer2005中的T-SQL增强
SQLServer2005中的T-SQL增强
--使用SELECT语句作为条件
SQLServer2005中的T-SQL增强
SELECT TOP(SELECT COUNT(*FROM toptest2) * 
SQLServer2005中的T-SQL增强
FROM toptest
SQLServer2005中的T-SQL增强
SQLServer2005中的T-SQL增强
--指出top
SQLServer2005中的T-SQL增强
DELETE TOP(2) toptest where column1>'t6'
SQLServer2005中的T-SQL增强
SQLServer2005中的T-SQL增强
--更新top
SQLServer2005中的T-SQL增强
UPDATE TOP(2) toptest SET column1 = 'hi' where column1<='t2'
SQLServer2005中的T-SQL增强
SQLServer2005中的T-SQL增强
SELECT * FROM toptest

排序函数 Ranking Functions

1SQL Server引入几个新的排序函数:如ROW_NUMBERRANKDENSE_RANK等。些新函数使您可以有效地分析数据以及向查询果行提供排序

2、排序函数都遵循似的法模式:

SQLServer2005中的T-SQL增强()OVER
SQLServer2005中的T-SQL增强(
[PARTITION BY]
SQLServer2005中的T-SQL增强
ORDER BY)

函数只能在查询的两个子句中指定 - SELECT子句或ORDER BY子句中。以下详细讨论不同的函数。 

3ROW_NUMBER
ROW_NUMBER
果集的, 而不是数据纪录存放的原始

SQLServer2005中的T-SQL增强USE demo
SQLServer2005中的T-SQL增强
GO
SQLServer2005中的T-SQL增强
CREATE TABLE rankorder
SQLServer2005中的T-SQL增强(
SQLServer2005中的T-SQL增强 orderid 
INT,
SQLServer2005中的T-SQL增强 qty 
INT
SQLServer2005中的T-SQL增强)
SQLServer2005中的T-SQL增强
GO
SQLServer2005中的T-SQL增强
INSERT rankorder VALUES(30001,10)
SQLServer2005中的T-SQL增强
INSERT rankorder VALUES(10001,10)
SQLServer2005中的T-SQL增强
INSERT rankorder VALUES(10006,10)
SQLServer2005中的T-SQL增强
INSERT rankorder VALUES(40005,10)
SQLServer2005中的T-SQL增强
INSERT rankorder VALUES(30003,15)
SQLServer2005中的T-SQL增强
INSERT rankorder VALUES(30004,20)
SQLServer2005中的T-SQL增强
INSERT rankorder VALUES(20002,20)
SQLServer2005中的T-SQL增强
INSERT rankorder VALUES(20001,20)
SQLServer2005中的T-SQL增强
INSERT rankorder VALUES(10005,30)
SQLServer2005中的T-SQL增强
INSERT rankorder VALUES(30007,30)
SQLServer2005中的T-SQL增强
INSERT rankorder VALUES(40001,40)
SQLServer2005中的T-SQL增强
GO
SQLServer2005中的T-SQL增强
SELECT orderid,qty,
SQLServer2005中的T-SQL增强  ROW_NUMBER() 
OVER(ORDER BY qty) AS rownumber,
SQLServer2005中的T-SQL增强  RANK()       
OVER(ORDER BY qty) AS rank,
SQLServer2005中的T-SQL增强  DENSE_RANK() 
OVER(ORDER BY qty) AS denserank 
SQLServer2005中的T-SQL增强
FROM rankorder
SQLServer2005中的T-SQL增强
ORDER BY qty

通用表表达式 Common Table Expressions 

通用表表达式(CTE)是一个可以由定义语句引用的临时表命名的果集。在他简单形式中,您可以将CTE视为类似于视图和派生表混合功能的改版本。在查询FROM子句中引用CTE的方式似于引用派生表和视图的方式。CTE一次,即可在查询中多次引用它。在CTE的定中,可以引用在同一批理中定量。但是CTE的真正威力在于它递归功能,即CTE可以包含自身的引用。

视图、派生表和CTE内部的查询的一般形式

1视图

SQLServer2005中的T-SQL增强CREATE VIEW <view_name>(<column_aliases>AS <view_query>

2、派生表

SQLServer2005中的T-SQL增强SELECT * FROM (<derived_table)query>AS <dericed_table_alias>(<column_aliases>)

3CTE

SQLServer2005中的T-SQL增强WITH <cte_alias>(<column_aliases>)
SQLServer2005中的T-SQL增强
AS
SQLServer2005中的T-SQL增强{
SQLServer2005中的T-SQL增强 
<cte_query>
SQLServer2005中的T-SQL增强)
SQLServer2005中的T-SQL增强
SELECT * FROM <cte_alias]>

关键WITH之后,CTE提供一个名,并且它的果列提供一个可名列表;CTE的主体;然后从外部查询中引用它。

4、演示代

SQLServer2005中的T-SQL增强USE AdventureWorks
SQLServer2005中的T-SQL增强
GO
SQLServer2005中的T-SQL增强
WITH SalesCTE(ProductID, SalesOrderID)
SQLServer2005中的T-SQL增强
AS 
SQLServer2005中的T-SQL增强(
SQLServer2005中的T-SQL增强 
SELECT ProductID, COUNT(SalesOrderID) 
SQLServer2005中的T-SQL增强 
FROM Sales.SalesOrderDetail 
SQLServer2005中的T-SQL增强 
GROUP BY ProductID
SQLServer2005中的T-SQL增强)
SQLServer2005中的T-SQL增强
SELECT * FROM SalesCTE
SQLServer2005中的T-SQL增强

Recursive CTEs 递归的通用表表达式

递归CTE是根据至少两个查询(或者称两个成)构建的,一个是非递归查询,也成固定成,只能用一次,另外一个是递归查询,也成为递归RM),可以反复调用,直到查询不再返回行。查询UNION ALL运算符一个独的CTE

--使用递归的通用表表达式

SQLServer2005中的T-SQL增强USE demo
SQLServer2005中的T-SQL增强
GO
SQLServer2005中的T-SQL增强
CREATE TABLE CarParts
SQLServer2005中的T-SQL增强(
SQLServer2005中的T-SQL增强 CarID 
INT NOT NULL,
SQLServer2005中的T-SQL增强 Part 
VARCHAR(15),
SQLServer2005中的T-SQL增强 SubPart 
VARCHAR(15),
SQLServer2005中的T-SQL增强 Qty 
INT
SQLServer2005中的T-SQL增强)
SQLServer2005中的T-SQL增强
GO
SQLServer2005中的T-SQL增强
INSERT CarParts VALUES (1'Body''Door'4)
SQLServer2005中的T-SQL增强
INSERT CarParts VALUES (1'Body''Trunk Lid'1)
SQLServer2005中的T-SQL增强
INSERT CarParts VALUES (1'Body''Car Hood'1)
SQLServer2005中的T-SQL增强
INSERT CarParts VALUES (1'Door''Handle'1)
SQLServer2005中的T-SQL增强
INSERT CarParts VALUES (1'Door''Lock'1)
SQLServer2005中的T-SQL增强
INSERT CarParts VALUES (1'Door''Window'1)
SQLServer2005中的T-SQL增强
INSERT CarParts VALUES (1'Body''Rivets'1000)
SQLServer2005中的T-SQL增强
INSERT CarParts VALUES (1'Door''Rivets'100)
SQLServer2005中的T-SQL增强
INSERT CarParts VALUES (1'Door''Mirror'1)
SQLServer2005中的T-SQL增强
GO
SQLServer2005中的T-SQL增强
SELECT * FROM CarParts
SQLServer2005中的T-SQL增强
GO
SQLServer2005中的T-SQL增强
SQLServer2005中的T-SQL增强
WITH CarPartsCTE(SubPart, Qty) 
SQLServer2005中的T-SQL增强
AS
SQLServer2005中的T-SQL增强(
SQLServer2005中的T-SQL增强 
-- 固定成员 (AM):
SQLServer2005中的T-SQL增强
 -- SELECT查询无需参考CarPartsCTE
SQLServer2005中的T-SQL增强
 SELECT SubPart, Qty
SQLServer2005中的T-SQL增强 
FROM CarParts
SQLServer2005中的T-SQL增强 
WHERE Part = 'Body'
SQLServer2005中的T-SQL增强 
UNION ALL
SQLServer2005中的T-SQL增强 
-- 递归成员 (RM):
SQLServer2005中的T-SQL增强
 -- SELECT查询参考CarPartsCTE
SQLServer2005中的T-SQL增强
 SELECT CarParts.SubPart, CarPartsCTE.Qty * CarParts.Qty
SQLServer2005中的T-SQL增强 
FROM CarPartsCTE 
SQLServer2005中的T-SQL增强 
INNER JOIN CarParts ON CarPartsCTE.SubPart = CarParts.Part
SQLServer2005中的T-SQL增强 
WHERE CarParts.CarID = 1
SQLServer2005中的T-SQL增强)

-- 外部查询

SQLServer2005中的T-SQL增强SELECT SubPart, SUM(Qty) AS TotalNUM
SQLServer2005中的T-SQL增强
FROM CarPartsCTE
SQLServer2005中的T-SQL增强
GROUP BY SubPart   
SQLServer2005中的T-SQL增强

新的系运算符 PIVOT/UNPIVOT/APPLY

1PIVOT
PIVOT
运算符将行旋转为列,并且可能同时执行聚合。使用PIVOT运算符要注意的重要一点是,需要它提供一个查询表达式,表达式使用视图、派生表或者是CTE只返回所注的列。

2UNPIVOT
UNPIVOT
运算符行与PIVOT运算符相反的操作;他将列旋转为行了。

3APPLY
APPLY
系运算符允外部表的个行用指定的表函数一次。您可以在查询FROM子句中指定APPLY,其方式与使用JOIN系运算符似。APPLY具有两形式:CROSS APPLYOUTER APPLY

演示:

SQLServer2005中的T-SQL增强USE demo
SQLServer2005中的T-SQL增强
GO
SQLServer2005中的T-SQL增强
SQLServer2005中的T-SQL增强
CREATE TABLE orders
SQLServer2005中的T-SQL增强(
SQLServer2005中的T-SQL增强 Customer 
VARCHAR(10NOT NULL,
SQLServer2005中的T-SQL增强 product 
VARCHAR(20NOT NULL,
SQLServer2005中的T-SQL增强 quantity 
INT NOT NULL
SQLServer2005中的T-SQL增强)
SQLServer2005中的T-SQL增强
GO
SQLServer2005中的T-SQL增强
INSERT orders VALUES('Mike''Bike',3)
SQLServer2005中的T-SQL增强
INSERT orders VALUES('Mike','Chain',2)
SQLServer2005中的T-SQL增强
INSERT orders VALUES('Mike','Bike',5)
SQLServer2005中的T-SQL增强
INSERT orders VALUES('Lisa','Bike',3)
SQLServer2005中的T-SQL增强
INSERT orders VALUES('Lisa','Chain',3)
SQLServer2005中的T-SQL增强
INSERT orders VALUES('Lisa','Chain',4)
SQLServer2005中的T-SQL增强
INSERT orders VALUES('Lisa','Bike',2)
SQLServer2005中的T-SQL增强
SQLServer2005中的T-SQL增强
SELECT * FROM orders
SQLServer2005中的T-SQL增强
SQLServer2005中的T-SQL增强
SELECT * FROM orders
SQLServer2005中的T-SQL增强PIVOT (
SUM(quantity) FOR product IN ([Bike],[Chain])) AS a
SQLServer2005中的T-SQL增强
USE demo
SQLServer2005中的T-SQL增强
GO
SQLServer2005中的T-SQL增强
CREATE TABLE SALES1
SQLServer2005中的T-SQL增强(
SQLServer2005中的T-SQL增强  
[Year] INT,
SQLServer2005中的T-SQL增强  Quarter 
CHAR(2),
SQLServer2005中的T-SQL增强  Amount 
FLOAT
SQLServer2005中的T-SQL增强)
SQLServer2005中的T-SQL增强
GO
SQLServer2005中的T-SQL增强
INSERT INTO SALES1 VALUES (2001'Q1'80)
SQLServer2005中的T-SQL增强
INSERT INTO SALES1 VALUES (2001'Q2'70)
SQLServer2005中的T-SQL增强
INSERT INTO SALES1 VALUES (2001'Q3'55)
SQLServer2005中的T-SQL增强
INSERT INTO SALES1 VALUES (2001'Q3'110)
SQLServer2005中的T-SQL增强
INSERT INTO SALES1 VALUES (2001'Q4'90)
SQLServer2005中的T-SQL增强
INSERT INTO SALES1 VALUES (2002'Q1'200)
SQLServer2005中的T-SQL增强
INSERT INTO SALES1 VALUES (2002'Q2'150)
SQLServer2005中的T-SQL增强
INSERT INTO SALES1 VALUES (2002'Q2'40)
SQLServer2005中的T-SQL增强
INSERT INTO SALES1 VALUES (2002'Q2'60)
SQLServer2005中的T-SQL增强
INSERT INTO SALES1 VALUES (2002'Q3'120)
SQLServer2005中的T-SQL增强
INSERT INTO SALES1 VALUES (2002'Q3'110)
SQLServer2005中的T-SQL增强
INSERT INTO SALES1 VALUES (2002'Q4'180)
SQLServer2005中的T-SQL增强
GO
SQLServer2005中的T-SQL增强
SQLServer2005中的T-SQL增强
SELECT * FROM SALES1
SQLServer2005中的T-SQL增强PIVOT
SQLServer2005中的T-SQL增强(
SUM (Amount) --使用SUM聚合数量列
SQLServer2005中的T-SQL增强
FOR [Quarter] --PIVOT Quarter 列
SQLServer2005中的T-SQL增强
IN (Q1, Q2, Q3, Q4)) --使用季节
SQLServer2005中的T-SQL增强
AS P
SQLServer2005中的T-SQL增强
GO
SQLServer2005中的T-SQL增强
SQLServer2005中的T-SQL增强
SELECT * INTO temp1 FROM orders
SQLServer2005中的T-SQL增强PIVOT (
sum(quantity) FOR product IN ([Bike],[Chain])) AS a
SQLServer2005中的T-SQL增强
SQLServer2005中的T-SQL增强
SELECT * FROM temp1
SQLServer2005中的T-SQL增强
SQLServer2005中的T-SQL增强
SELECT customer, product,quantity
SQLServer2005中的T-SQL增强
FROM temp1
SQLServer2005中的T-SQL增强UNPIVOT(quantity 
FOR product IN ([Bike],[Chain])) AS a
SQLServer2005中的T-SQL增强
----------------------------------------------------
SQLServer2005中的T-SQL增强
USE demo
SQLServer2005中的T-SQL增强
GO
SQLServer2005中的T-SQL增强
CREATE TABLE Arrays
SQLServer2005中的T-SQL增强(
SQLServer2005中的T-SQL增强  aid 
INT NOT NULL IDENTITY PRIMARY KEY,
SQLServer2005中的T-SQL增强  array 
VARCHAR(7999NOT NULL
SQLServer2005中的T-SQL增强)
SQLServer2005中的T-SQL增强
GO
SQLServer2005中的T-SQL增强
INSERT INTO Arrays VALUES('')
SQLServer2005中的T-SQL增强
INSERT INTO Arrays VALUES('10')
SQLServer2005中的T-SQL增强
INSERT INTO Arrays VALUES('20,40,30')
SQLServer2005中的T-SQL增强
INSERT INTO Arrays VALUES('-1,-3,-5')
SQLServer2005中的T-SQL增强
GO
SQLServer2005中的T-SQL增强
CREATE FUNCTION  function1(@arr AS VARCHAR(7999))
SQLServer2005中的T-SQL增强  
RETURNS @t TABLE(pos INT NOT NULL, value INT NOT NULL)
SQLServer2005中的T-SQL增强
AS
SQLServer2005中的T-SQL增强
BEGIN
SQLServer2005中的T-SQL增强  
DECLARE @end AS INT@start AS INT@pos AS INT
SQLServer2005中的T-SQL增强  
SELECT @arr = @arr + ','@pos = 1,
SQLServer2005中的T-SQL增强    
@start = 1@end = CHARINDEX(','@arr@start)
SQLServer2005中的T-SQL增强  
WHILE @end > 1
SQLServer2005中的T-SQL增强  
BEGIN
SQLServer2005中的T-SQL增强    
INSERT INTO @t VALUES(@posSUBSTRING(@arr@start@end - @start))
SQLServer2005中的T-SQL增强
SQLServer2005中的T-SQL增强    
SELECT @pos = @pos + 1,
SQLServer2005中的T-SQL增强      
@start = @end + 1@end = CHARINDEX(','@arr@start)
SQLServer2005中的T-SQL增强  
END
SQLServer2005中的T-SQL增强  
RETURN
SQLServer2005中的T-SQL增强
END
SQLServer2005中的T-SQL增强
SQLServer2005中的T-SQL增强
--测试
SQLServer2005中的T-SQL增强
SELECT * FROM function1('200,400,300')
SQLServer2005中的T-SQL增强
GO
SQLServer2005中的T-SQL增强
SQLServer2005中的T-SQL增强
SELECT A.aid, F.*
SQLServer2005中的T-SQL增强
FROM Arrays AS A
SQLServer2005中的T-SQL增强  
CROSS APPLY function1(array) AS F
SQLServer2005中的T-SQL增强
GO
SQLServer2005中的T-SQL增强
SELECT A.aid, F.*
SQLServer2005中的T-SQL增强
FROM Arrays AS A
SQLServer2005中的T-SQL增强  
OUTER APPLY function1(array) AS F
SQLServer2005中的T-SQL增强
GO

DDL DDL Triggers

SQL Server 2005可以就整个服器或数据的某个范围为DDL事件定器。也可为单DDL句(例如:CREAT_TABLEDROP_TABLE等)或者组语句(例如:指定DDL_DATABASE_LEVEL_EVENTS想要触器触数据所有DDL事件)定DDL器。

DDL器内部,可以通过访问eventdata()函数得与激发该器的事件有的数据。eventdata()函数返回有事件的xml数据。DDL器特有用的方案包括DDL更改的完整性检查核方案以及其他方案。

演示:

SQLServer2005中的T-SQL增强USE demo
SQLServer2005中的T-SQL增强
GO
SQLServer2005中的T-SQL增强
CREATE TRIGGER prevent_drop_table ON DATABASE FOR DROP_TABLE
SQLServer2005中的T-SQL增强
AS
SQLServer2005中的T-SQL增强
RAISERROR('没有删除表的权限.'101)
SQLServer2005中的T-SQL增强
PRINT '尝试在数据库' + DB_NAME() + '中删除表.'
SQLServer2005中的T-SQL增强
PRINT CONVERT (nvarchar (1000),EventData())
SQLServer2005中的T-SQL增强
ROLLBACK
SQLServer2005中的T-SQL增强
GO
SQLServer2005中的T-SQL增强
-- 测试
SQLServer2005中的T-SQL增强
CREATE TABLE TestDROP(col1 INT)
SQLServer2005中的T-SQL增强
GO
SQLServer2005中的T-SQL增强
INSERT INTO TestDROP VALUES(1)
SQLServer2005中的T-SQL增强
SQLServer2005中的T-SQL增强
DROP TABLE testdrop
SQLServer2005中的T-SQL增强
SQLServer2005中的T-SQL增强
-- Server
SQLServer2005中的T-SQL增强
CREATE TRIGGER audit_ddl_logins ON ALL SERVER
SQLServer2005中的T-SQL增强  
FOR CREATE_LOGIN, ALTER_LOGIN, DROP_LOGIN
SQLServer2005中的T-SQL增强
AS
SQLServer2005中的T-SQL增强
PRINT '发生DDL LOGIN.'
SQLServer2005中的T-SQL增强
PRINT CONVERT (nvarchar (1000),EventData())
SQLServer2005中的T-SQL增强
GO
SQLServer2005中的T-SQL增强
SQLServer2005中的T-SQL增强
-- 测试
SQLServer2005中的T-SQL增强
CREATE LOGIN login1 WITH PASSWORD = '123'
SQLServer2005中的T-SQL增强
ALTER LOGIN login1 WITH PASSWORD = 'xyz'
SQLServer2005中的T-SQL增强
DROP LOGIN login1

总结

SQL Server 2005中的Transaction-SQL功能提高了用查询时的表达能力,使用可以改善代的性能,并且充了错误处理能力。SQL Server 2005 Transaction-SQL上所做的改反映了其更好地足了ANSI-99 SQL范的要求以及客的需求。Transaction-SQL和托管代选择

 

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-09-28
  • 2021-11-28
  • 2021-10-11
  • 2022-01-08
  • 2022-02-12
猜你喜欢
  • 2021-10-04
  • 2021-08-09
  • 2021-08-26
  • 2022-12-23
  • 2022-12-23
  • 2022-01-07
相关资源
相似解决方案