SQL Server 2008对T-SQL语言的增强(一)

日期: 2008-06-05 作者:佚名 来源:TechTarget中国

  Microsoft SQL Server 2008对T-SQL语言进行了进一步增强。为了让开发人员尽快了解这些变化,我们针对2007年6月CTP版本的SQL Server 2008中的T-SQL语言的新增功能进行了分析和尝试。本文描述自 SQL Server 2008 CTP1 以来这些语言增强和变化。


  1、T-SQL行构造器


  T-SQL 行构造器(Row Constructors)用来在insert语句中一次性插入多行数据。例如:
  




create TABLE #a
(
Column1
nvarchar(max),
Column2
nvarchar(max)
);
GO

insert INTO #a
VALUES (
(
1, 1),
(
2, 2)
);

select * FROM #a;
GO

drop TABLE #a;
GO


  经过增强后的insert语句的语法结构如下。


  





[ WITH <common_table_expression> [ ,…n ] ]
insert
[ TOP ( expression ) [ PERCENT ] ]
[ INTO ]
{ <object> | rowset_function_limited
[ WITH ( <Table_Hint_Limited> [ …n ] ) ]
}
{
[ ( column_list ) ]
[ <OUTPUT Clause> ]
{ VALUES ( ( { DEFAULT | NULL | expression } [ ,…n ] ) [ ,…n ] )
| derived_table
| &#101xecute_statement
| <dml_table_source>
| DEFAULT VALUES
}
}
[; ]

<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查询优化程序如何更高效的执行查询。该提示指示优化程序对查询引用的表和视图通过索引检索来作为唯一的查询执行访问路径。也就是强制通过索引检索数据。例如:






USE tempdb;
GO
drop TABLE t;
GO
create TABLE t(i int UNIQUE, j int, vc varchar(100));
create INDEX t_vc ON t(vc);
GO
DECLARE @p1 int, @p2 int, @p3 int, @p4 int, @p5 int;
select * FROM t where i IN (@p1, @p2, @p3, @p4, @p5);
GO
DECLARE @p1 int, @p2 int, @p3 int, @p4 int, @p5 int;
select * FROM t WITH (FORCESEEK) where i IN (@p1, @p2, @p3, @p4, @p5);
GO
select * FROM t where vc like Test%;
GO
select * FROM t WITH (FORCESEEK) where vc like Test%;
GO
DECLARE @vc varchar(100);
select * FROM t where vc like @vc;
GO
DECLARE @vc varchar(100);
select * FROM t WITH (FORCESEEK) where vc like @vc;
GO


    3. GROUPING SETS


  新的T-SQL对GROUP BY子句增加了GROUPING SETS, ROLLUP和CUBE操作符。还有一个新的函数 GROUPING_ID(),它相比GROUPING()函数返回更多分组级别的信息。WITH ROLLUP, WITH CUBE和ALL等非 ISO 标准语法已经不再有效。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

作者

佚名
佚名