返回首页
当前位置: 主页 > SQL2008专题 > 基础知识 >

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

时间:2008-03-18 10:15来源: 作者: 点击:
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

顶一下
(1)
100%
踩一下
(0)
0%
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
发布者资料
today 查看详细资料 发送留言 加为好友 用户等级:注册会员 注册时间:2008-02-27 10:02 最后登录:2008-12-25 09:12
推荐内容