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

ZDNet软件频道 时间:2008-09-24 作者:周融 | ZDNET 我要评论()
本文关键词:SQL Server 2008 T-SQL语言 SQL Server
Microsoft SQL Server 2008 对 T-SQL 语言进行了进一步增强。为了让开发人员尽快了解这些变化,本文描述自 SQL Server 2008……

  Microsoft SQL Server 2008T-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 语句中一次性插入多行数据。例如:

以下是引用片段:
  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> ]
     [ ,...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


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134