英超

SQL Server 2008对T-SQL语言的增强(2)

2019-12-02 20:24:50来源:励志吧0次阅读

2. FORCESEEK 提示  FORCESEEK 是一个新的表提示(Table Hints),它用来指定 SQL Server 查询优化程序如何更高效的执行查询。该提示指示优化程序对查询引用的表和视图通过索引检索来作为唯一的查询执行访问路径。也就是强制通过索引检索数据。例如:

USEtempdb;

GO

DROPTABLEt;

GO

CREATETABLEt(iintUNIQUE,jint,vcvarchar(100));

CREATEINDEXt_vcONt(vc);

GO

DECLARE@p1int,@p2int,@p3int,@p4int,@p5int;

SELECT*FROMtWHEREiIN(@p1,@p2,@p3,@p4,@p5);

GO

DECLARE@p1int,@p2int,@p3int,@p4int,@p5int;

SELECT*FROMtWITH(FORCESEEK)WHEREiIN(@p1,@p2,@p3,@p4,@p5);

GO

SELECT*FROMtWHEREvcLIKE'Test%';

GO

SELECT*FROMtWITH(FORCESEEK)WHEREvcLIKE'Test%';

GO

DECLARE@vcvarchar(100);

SELECT*FROMtWHEREvcLIKE@vc;

GO

DECLARE@vcvarchar(100);

SELECT*FROMtWITH(FORCESEEK)wherevclike@vc;

GO

3. GROUPING SETS

新的 T-SQL 对 GROUP BY 子句增加了 GROUPING SETS, ROLLUP 和 CUBE 操作符。还有一个新的函数 GROUPING_ID(),它相比 GROUPING() 函数返回更多分组级别的信息。WITH ROLLUP, WITH CUBE 和 ALL 等非 ISO 标准语法已经不再有效。

4. 兼容性级别

新的 ALTER DATABASE SET COMPATIBILITY_LEVEL 语法替换了 sp_dbcomplevel 存储过程。它用来设置特定数据库的兼容性级别。其语法形式为:

ALTERDATABASEdatabase_name

SETCOMPATIBILITY_LEVEL={80|90|100}

您可以为 database_name 为名称的数据库设置特定兼容性级别。80、90 和 100 分别代表 SQL Server 2000、SQL Server 2005 和 SQL Server 2008。

5. 用户自定义表数据类型

现在,SQL Server 提供一种新的用户自定义数据类型——自定义表数据类型(User-defined Table Types)。它可以作为参数提供给语句、存储过程或者函数。您还可以为它创建唯一约束和主键。

请使用 CREATE TYPE 语句创建这种数据类型。如:

USEAdventureWorks;

GO

/**//*Createauser-definedtabletype*/

CREATETYPELocationTableTypeASTABLE

(LocationNameVARCHAR(50)

,CostRateINT);

GO

对于表类型,有如下约束:

1、用户自定义表类型不能作为表的列或者结构化用户自定义类型的域。

2、基于用户自定义表类型的别名类型。

3、不允许 NOT FOR REPLICATION 选项。

4、CHECK 约束需要一个计算列。

5、在计算列上的主键必须包含 NOT NULL 和 PERSISTED 约束。

6、不能在用户自定义表类型上创建非簇索引。除非索引是创建 PRIMARY KEY 或 UNIQUE 约束的返回值。

7、不能指定 DEFAULT 值。

8、一旦用户自定义表类型被创建,则它就无法更改。

9、如果没有定义用户自定义表类型上的计算列,则用户自定义函数无法调用。

江苏治癫痫病哪家医院好
云南去医院怎么看妇科
徐州好的治性病医院
昆山市第一人民医院怎么样
成都市第六人民医院
分享到: