科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道SQL Server 2008对T-SQL语言的增强

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

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

Microsoft SQL Server 2008 对 T-SQL 语言进行了进一步增强。为了让开发人员尽快了解这些变化,本文描述自 SQL Server 2008……

作者:周融 来源:IT专家网 2007年11月19日

关键字: SQL Server 2008 T-SQL SQL Server

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共3页)

  Microsoft SQL Server 2008T-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

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章