请联系我们

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

来源: 数据库 SQL Server |  作者: 不详 |  发布: 2009-7-08 10:09


【引自lee576的博客】本文包含如下内容:

◆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 [ ,...n ] ]

INSERT

[ TOP ( expression ) [ PERCENT ] ]

[ INTO ]

{ | rowset_function_limited

[ WITH (

[ ...n ] ) ]

}

{

[ ( column_list ) ]

[ ]

{ VALUES ( ( { DEFAULT | NULL | expression } [ ,...n ] ) [ ,...n ] )

| derived_table

| execute_statement

|

| DEFAULT VALUES

}

}

[; ]

::=

{

[ server_name . database_name . schema_name .

| database_name .[ schema_name ] .

| schema_name .

]

table_or_view_name

}

::=

SELECT

FROM ( )

[AS] table_alias [ ( column_alias [ ,...n ] ) ]

[ WHERE ]

[ OPTION ( [ ,...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页: 1 下一页

【内容导航】


* 部分内容来源于网络,版权属原作者所有,转载请注明来源。
打印 | 收藏此页 |  推荐给好友 | 举报