欢迎您访问我爱IT技术网,今天小编为你分享的编程技术是:【SQL Server 2008对T-SQL语言的增强】,下面是详细的分享!
SQL Server 2008对T-SQL语言的增强
Microsoft SQL Server 2008 对 T-SQL 语言进行了进一步增强。为了让开发人员尽快了解这些变化,我们针对 2007 年 6 月 CTP 版本的 SQL Server 2008 中的 T-SQL 语言的新增功能进行了分析和尝试。本文描述自 SQL Server 2008 CTP1 以来这些语言增强和变化。
本文包含如下内容:
· T-SQL 行构造器
· FORCESEEK 表提示
· GROUPING SETS
· 兼容性级别
· 用户自定义表数据类型
· 表值参数
· MERGE 语句
本文适用于:Microsoft)R) SQL Server(TM) 2008 Developer Edition June 2007 CTP
1、T-SQL 行构造器
T-SQL 行构造器(Row Constructors)用来在 INSERT 语句中一次性插入多行数据。例如:
CREATETABLE#a
以下为引用的内容:
(
Column1nvarchar(max),
Column2nvarchar(max)
);
GO
INSERTINTO#a
VALUES(
('1','1'),
('2','2')
);
SELECT*FROM#a;
GO
DROPTABLE#a;
GO
经过增强后的 INSERT 语句的语法结构如下。
| 以下为引用的内容:
|
2. FORCESEEK 提示
FORCESEEK 是一个新的表提示(Table Hints),它用来指定 SQL Server 查询优化程序如何更高效的执行查询。该提示指示优化程序对查询引用的表和视图通过索引检索来作为唯一的查询执行访问路径。也就是强制通过索引检索数据。例如:
USEtempdb;
以下为引用的内容:
GO
DROPTABLEt;
GO
CREATETABLEt(iintUNIQUE,jint,vcvarchar(100));
CREATEINDEXt_vcONt(vc);
GO
DECLARE@p1int,@p2int,@p3int,@p4int,@p5int;
SELECT*FROMtWHEREiIN(@p1,@p2,@p3,@p4,@p5);
GO
DECLARE@p1int,@p2int,@p3int,@p4int,@p5int;
SELECT*FROMtWITH(FORCESEEK)WHEREiIN(@p1,@p2,@p3,@p4,@p5);
GO
SELECT*FROMtWHEREvcLIKE'Test%';
GO
SELECT*FROMtWITH(FORCESEEK)WHEREvcLIKE'Test%';
GO
DECLARE@vcvarchar(100);
SELECT*FROMtWHEREvcLIKE@vc;
GO
DECLARE@vcvarchar(100);
SELECT*FROMtWITH(FORCESEEK)wherevclike@vc;
GO
3. GROUPING SETS
新的 T-SQL 对 GROUP BY 子句增加了 GROUPING SETS, ROLLUP 和 CUBE 操作符。还有一个新的函数 GROUPING_ID(),它相比 GROUPING() 函数返回更多分组级别的信息。WITH ROLLUP, WITH CUBE 和 ALL 等非 ISO 标准语法已经不再有效。
4. 兼容性级别
新的 ALTER DATABASE SET COMPATIBILITY_LEVEL 语法替换了 sp_dbcomplevel 存储过程。它用来设置特定数据库的兼容性级别。其语法形式为:
ALTERDATABASEdatabase_name
以下为引用的内容:
SETCOMPATIBILITY_LEVEL={80|90|100}
您可以为 database_name 为名称的数据库设置特定兼容性级别。80、90 和 100 分别代表 SQL Server 2000、SQL Server 2005 和 SQL Server 2008。
5. 用户自定义表数据类型
现在,SQL Server 提供一种新的用户自定义数据类型——自定义表数据类型(User-defined Table Types)。它可以作为参数提供给语句、存储过程或者函数。您还可以为它创建唯一约束和主键。
请使用 CREATE TYPE 语句创建这种数据类型。如:
USEAdventureWorks;
以下为引用的内容:
GO
CREATETYPELocationTableTypeASTABLE
(LocationNameVARCHAR(50)
,CostRateINT);
GO
对于表类型,有如下约束:
1、用户自定义表类型不能作为表的列或者结构化用户自定义类型的域。
2、基于用户自定义表类型的别名类型。
3、不允许 NOT FOR REPLICATION 选项。
4、CHECK 约束需要一个计算列。
5、在计算列上的主键必须包含 NOT NULL 和 PERSISTED 约束。
6、不能在用户自定义表类型上创建非簇索引。除非索引是创建 PRIMARY KEY 或 UNIQUE 约束的返回值。
7、不能指定 DEFAULT 值。
8、一旦用户自定义表类型被创建,则它就无法更改。
9、如果没有定义用户自定义表类型上的计算列,则用户自定义函数无法调用。
6. 表值参数
数据库引擎现在支持一种新的参数类型来引用用户自定义表类型(参考 5)。表值参数可以发送更多的 SQL Server 数据。
下面的示例展示了如何使用表值参数。
| 以下为引用的内容:
|
7. MERGE 语句
这个新增的 Transaction SQL 语句在一个基于源数据连接结果集的目标表上执行 INSERT、UPDATE 和 DELETE 操作。该语法允许您将一个数据源连接到目标表或视图上。然后在连接后的结果集上执行多种操作。
MERGE 的语法为:
| 以下为引用的内容:
|
示例:在一条 SQL 语句中使用 WHERE 在一张表上执行 UPDATE 和 DELETE 操作
USEAdventureWorks;
以下为引用的内容:
GO
MERGEProduction.ProductInventoryASpi
USING(SELECTProductID,SUM(OrderQty)FROMSales.SalesOrderDetailsod
JOINSales.SalesOrderHeadersoh
ONsod.SalesOrderID=soh.SalesOrderID
ANDsoh.OrderDate=GETDATE()
GROUPBYProductID)ASsrc(ProductID,OrderQty)
ON(pi.ProductID=src.ProductID)
WHENMATCHEDANDpi.Quantity-src.OrderQty<>0
THENUPDATESETpi.Quantity=pi.Quantity-src.OrderQty
WHENMATCHEDANDpi.Quantity-src.OrderQty=0
THENDELETE;
这个示例是一个非常典型的销售定货库存问题。这个示例很简单,表达的意思就是:如果某一个产品产生了销售定单数据,则将其对应的产品库存除去该销售定单所产生的数量,如果当前库存数量与该销售定单数量相同,则从库存表中删除该产品的库存纪录。
我们看到,利用 MERGE 语句可以将复杂的 SQL 语句简化。它比起 IF、CASE 等更加灵活和强大。
结论
Microsoft SQL Server 2008 对事务性 SQL 语言做了一些增强,提高了查询效率。使得 SQl Server 成为大中型企业数据库的首先产品。SQL Server 2008 将伴随 Visual Studio 2008 一起发布,开发人员提前了解这些信息有助于在 SQL Server 的新版本发布后快速建立基于该版本的企业级应用程序。
以上所分享的是关于SQL Server 2008对T-SQL语言的增强,下面是编辑为你推荐的有价值的用户互动:
相关问题:求:正版|Microsoft SQL Server 2008技术内幕:T-S...
答:这本书确实是一本好书,看了好几遍了,每次看完都有收获,纸本书好像真的没有卖,当当我也看了,缺货了,不知道你有没有pdf版的,没有的话我有共享,地址如下: http://pan.baidu.com/share/link?shareid=284015963&uk=2081316733 >>详细
相关问题:推荐几本使用的SQL server 2008的书,中等水平就可...
答:《SQL Server 2008 T-SQL秘籍》或《SQL Server 2008 T-SQL处方》 《SQL Server 2008从入门到精通》 《Microsoft SQL Server 2008技术内幕:T-SQL语言基捶 《Microsoft SQL Server 2008技术内幕:T-SQL查询》 《深入解析SQL Server2008》 >>详细
相关问题:如何在SQL Server 2008下轻松调试T-SQL语句和存储过程
答:sqlserver2008中则完全不同,变成了必须要在SSMS中EXEC [PROCEDURE NAME] @VAR1,@VAR2,然后点绿色三角或者点菜单中的调试---启动调试。然后点工具栏的最右边的单步调试或者跳出等。下面的变量窗口和堆栈窗口等可以查看调试中变量等动态变化值。 ... >>详细
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
