您的位置:首页 > 数据库

SQL Server 2005中的T-SQL增强(二)

2009-05-20 23:53 369 查看
通用表表达式 Common Table Expressions

  通用表表达式(CTE)是一个可以由定义语句引用的临时表命名的结果集。在他们的简单形式中,您可以将CTE视为类似于视图和派生表混合功能的改进版本。在查询的FROM子句中引用CTE的方式类似于引用派生表和视图的方式。只须定义CTE一次,即可在查询中多次引用它。在CTE的定义中,可以引用在同一批处理中定义的变量。但是CTE的真正威力在于它们的递归功能,即CTE可以包含对它们自身的引用。

  视图、派生表和CTE内部的查询的一般形式

  1、视图

CREATE VIEW <view_name>(<column_aliases>) AS <view_query>

2、派生表

SELECT * FROM (<derived_table)query>) AS <dericed_table_alias>(<column_aliases>)

3、CTE

WITH <cte_alias>(<column_aliases>)

AS

{

<cte_query>

)

SELECT * FROM <cte_alias]>

在关键字WITH之后,为CTE提供一个别名,并且为它的结果列提供一个可选的别名列表;编写CTE的主体;然后从外部查询中引用它。

  4、演示代码

USE demo

GO

CREATE TRIGGER prevent_drop_table ON DATABASE FOR DROP_TABLE

AS

RAISERROR('没有删除表的权限.', 10, 1)

PRINT '尝试在数据库' + DB_NAME() + '中删除表.'

PRINT CONVERT (nvarchar (1000),EventData())

ROLLBACK

GO

-- 测试

CREATE TABLE TestDROP(col1 INT)

GO

INSERT INTO TestDROP VALUES(1)

DROP TABLE testdrop

-- Server

CREATE TRIGGER audit_ddl_logins ON ALL SERVER

FOR CREATE_LOGIN, ALTER_LOGIN, DROP_LOGIN

AS

PRINT '发生DDL LOGIN.'

PRINT CONVERT (nvarchar (1000),EventData())

GO

-- 测试

CREATE LOGIN login1 WITH PASSWORD = '123'

ALTER LOGIN login1 WITH PASSWORD = 'xyz'

DROP LOGIN login1


总结

  SQL Server 2005中的Transaction-SQL增强功能提高了用户在编写查询时的表达能力,使用户可以改善代码的性能,并且扩充了错误处理能力。SQL Server 2005 在Transaction-SQL上所做的改进反映了其更好地满足了ANSI-99 SQL规范的要求以及客户的需求。在Transaction-SQL和托管代码之间的选择。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: