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

互联网 | 编辑: 邹震 2008-08-29 09:30:00转载 一键看全文

第一页

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

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

提示:试试键盘 “← →” 可以实现快速翻页 

总共 3 页123
一键看全文

本文导航

相关阅读

每日精选

点击查看更多

首页 手机 数码相机 笔记本 游戏 DIY硬件 硬件外设 办公中心 数字家电 平板电脑