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 SQL Server(TM) 2008 Developer Edition June 2007 CTP
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 | execute_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
|