请联系我们

SQL Server 2008对T-SQL语言的增强

来源: 数据库 SQL Server |  作者: landluo |  发布: 2009-7-08 10:09


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 存储过程。它用来设置特定数据库的兼容性级别。其语法形式为:

ALTER DATABASE database_name

SET COMPATIBILITY_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 语句创建这种数据类型。如:

USE AdventureWorks;

GO

/* Create a user-defined table type */

CREATE TYPE LocationTableType AS TABLE

( LocationName VARCHAR(50)

, CostRate INT );

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 数据。

下面的示例展示了如何使用表值参数。

USE AdventureWorks;

GO

/* Create a table type. */

CREATE TYPE LocationTableType AS TABLE

( LocationName VARCHAR(50)

, CostRate INT );

GO

/* Create a procedure to receive data for the table-valued parameter. */

CREATE PROCEDURE usp_InsertProductionLocation

@TVP LocationTableType READONLY

AS

SET NOCOUNT ON

INSERT INTO [AdventureWorks].[Production].[Location]

([Name]

,[CostRate]

,[Availability]

,[ModifiedDate])

SELECT *, 0, GETDATE()

FROM @TVP;

GO

/* Declare a variable that references the type. */

DECLARE @LocationTVP

AS LocationTableType;

/* Add data to the table variable. */

INSERT INTO @LocationTVP (LocationName, CostRate)

SELECT [Name], 0.00

FROM

[AdventureWorks].[Person].[StateProvince];

/* Pass the table variable data to a stored procedure. */

EXEC usp_InsertProductionLocation @LocationTVP;

GO

7. MERGE 语句

这个新增的 Transaction SQL 语句在一个基于源数据连接结果集的目标表上执行 INSERT、UPDATE 和 DELETE 操作。该语法允许您将一个数据源连接到目标表或视图上。然后在连接后的结果集上执行多种操作。

共3页: 2 下一页

【内容导航】


* 部分内容来源于网络,版权属原作者所有,转载请注明来源。
打印 | 收藏此页 |  推荐给好友 | 举报