IT猫扑网:您身边最放心的安全下载站! 最新更新| 软件分类| 专题汇总| 手机版

您当前所在位置:IT猫扑网 > 数据库 > MSSQL > SQL Server 2008对T-SQL语言的增强

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

时间:2015-06-28 00:00 来源:IT猫扑网|http://www.itmop.com/ 作者:网管联盟 我要评论(0)

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 语句的语法结构如下。

以下为引用的内容:

[WITH<common_table_expression>[,...n]]
INSERT 
  [TOP(expression)[PERCENT]] 
  [INTO] 
  {<object>|rowset_function_limited 
   [WITH(<Table_Hint_Limited>[...n])]
  }
{
  [(column_list)] 
  [<OUTPUTClause>]
  {VALUES(({DEFAULT|NULL|expression}[,...n])[,...n])
  |derived_table 
  |execute_statement 
  |<dml_table_source>
  |DEFAULTVALUES 
  } 
} 
[;]
<object>::=
{ 
  [server_name.database_name.schema_name. 
   |database_name.[schema_name]. 
   |schema_name. 
  ]
    table_or_view_name
}
<dml_table_source>::=
  SELECT<select_list>
  FROM(<dml_statement_with_output_clause>) 
           [AS]table_alias[(column_alias[,...n])]
    [WHERE<search_condition>]
  [OPTION(<query_hint>[,...n])]

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
/**//*Createauser-definedtabletype*/
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 数据。

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

以下为引用的内容:

USEAdventureWorks;
GO
/**//*Createatabletype.*/
CREATETYPELocationTableTypeASTABLE 
(LocationNameVARCHAR(50)
,CostRateINT);
GO
/**//*Createaproceduretoreceivedataforthetable-valuedparameter.*/
CREATEPROCEDUREusp_InsertProductionLocation
  @TVPLocationTableTypeREADONLY
  AS 
  SETNOCOUNTON
  INSERTINTO[AdventureWorks].[Production].[Location]

关键词标签:增强,语言,GO,SQL,...

相关阅读 sql server系统表损坏的解决方法 SQL Server asp.net 数据提供程序连接池 SqlServer2005对现有数据进行分区具体步骤 一个Access数据库数据传递的实例方法 为导入文件加上时间戳标记的两种方法 SQL Server 2005 在不允许远程连接的情况下的破解

文章评论
发表评论

热门文章 sql server系统表损坏的解决方法 sql server系统表损坏的解决方法 SqlServer2005对现有数据进行分区具体步骤 SqlServer2005对现有数据进行分区具体步骤 解决SQL Server中Group无法实现的问题 解决SQL Server中Group无法实现的问题 SQL Server 2005降级到2000的正确操作步骤 SQL Server 2005降级到2000的正确操作步骤 手把手教你学会SQL Server镜像操作 手把手教你学会SQL Server镜像操作 实战手记:让百万级数据瞬间导入SQL Server 实战手记:让百万级数据瞬间导入SQL Server

相关下载

人气排行 配置和注册ODBC数据源-odbc数据源配置教程 如何远程备份(还原)SQL2000数据库 SQL2000数据库远程导入(导出)数据 SQL2000和SQL2005数据库服务端口查看或修改 修改Sql Server唯一约束教程 SQL Server 2005降级到2000的正确操作步骤 sql server系统表损坏的解决方法 浅谈JSP JDBC来连接SQL Server 2005的方法 SQL Server创建表语句介绍 MS-SQL2005服务器登录名、角色、数据库用户、角色、架构的关系 如何使用SQL Server中的客户端配置工具 SQL Server 分布式查询:OLE DB连接(一)