Yesky首页| 产品报价| 行情| 手机 | 数码 | 笔记本 | 台式机 | DIY硬件 | 外设 | 网络 | 数字家庭 | 评测 | 软件 | e时代 | 游戏 | 图片 | 壁纸 | 群乐 | 社区 | 博客 | 下载
软件频道>程序开发>JavaVBVCDelphiC/C++Web开发微软专栏移动数据库程序人生软件工程|产品中心下载向SOA转型
您现在的位置: 天极网 > 开发频道 > SQL Server 2008对T-SQL语言的增强
全文
群乐:SQL Server

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

2007-10-17 10:04 作者: 周融 出处: IT专家网 责任编辑:幽灵

  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 语句

网友关注
最新上市
编辑推荐
欢迎订阅天极网RSS聚合资讯:http://www.yesky.com/index.xml