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