SQL Server 2005 T-SQL的增強功能

转载 2007年10月11日 15:17:00

 

 

1. 增加Richer Data Type,例如varchar(max)、nvarchar(max)和varbinary(max)等資料類型,使用max指定最大2GB的儲存空間,可用於改進(取代)過去text, ntext和image無法跨頁儲存(8KB)的限制。另一個值得一提的是XML資料類型,用於儲存XML字串片段和XML檔案內容。


2. 支援try/catch error handling,用於異常攔截及異常處理,防止批次處理因異常而終止,但不包含嚴重等級在21以上的嚴重錯誤,例如違反資料完整一致性,或者硬體的錯誤等等。
try/catch結構如下:
--開啟xact_abort (預設為關閉)
set xact_abort on
begin try
begin tran
-- 批次處理
commit tran
end try
begin catch
rollback tran
--異常處理,例如print error_number(), error_saverity(), error_message()
end catch

3. Snapshot Isolation,Snapshot isolation是SQL Server 2005的一個新的隔離層級。它利用tempdb的linked list追蹤資料的異動,維持一份committed版本的資料,用於資料讀取,也就是將寫入程序與讀取程序作適當的隔離,使得寫入程序不會影響讀取程序,以提高資料的可用性。為了使用snapshot isolation,首先必須啟動database的snapshot,同時將connection的isolation level設定成snapshot,具體做法如下:
a. alter database mydb set allow_snapshot_isolation on
b. set transaction isolation level snapshot

4. Top enhance,SQL Server 2005允許使用數字表達式和子查詢指定查詢筆數或百分比,同時也可以用在Insert、Update和Delete等DML,比起set rowcount具有更佳的效能。例如取出單價最高前十名的商品排行,可以寫成
declare @t
set @t=10
select top(@t) from products order by unitprice desc

5. Output
SQL Server 2005增加了一個output關鍵字,用於Insert、Update和Delete等DML敘述,將傳回資料輸出到inserted或deleted資料表變數。Output許法如下:
output DML敘述 into @table_variable
執行Insert時,新增的資料會輸出到inserted資料表;執行Delete時,刪除的資料會輸出到deleted資料表;執行Update時,修改前的資料會輸出到deleted資料表,修改後的資料會輸出到inserted資料表。若在異動的過程中,需要讀取原始的資料進行邏輯運算,除了可以利用trigger之外,您也可以使用output達到相同的目的。

例如刪除單價低於100元以下的商品資料,並將這些商品的編號及名稱輸出到一個資料表變數中,則可以寫成
declare @table_var as table (c1 int, c2 varchar(10))
delete from products where unitpirce < 100
output deleted.productid, deleted.productname into @table_var

select * from @table_var

6. Ranking functions
SQL Server 2005加入了row_count、rank和dense_rank等3個新的排序函數,您可以使用這些函數更快更方便地找到所需的資料。
(1)row_count用於表示目前是第幾筆紀錄,第一筆紀錄為1,第二筆紀錄為2,依此類推。例如取出所有的商品資料,同時顯示紀錄編號,可以寫成
select row_count() over(order by unitprice) as rownum, * from products

(2)rank與row_count的主要不同在於若排序欄位的值相同,則賦予相同的紀錄編號,反之不相同,則維持原有的紀錄編號。例如取出10記錄,除了第1, 2, 3筆,以及第4, 5筆紀錄的排序欄位值相同,其餘皆不同,則這些紀錄的rank值分別依序為1, 1, 1, 4, 4, 6, 7, 8, 9, 10。

(3)dense_rank與row_count的主要不同在於若排序欄位的值相同,則賦予相同的紀錄編號,反之不相同,則將前一筆紀錄編號加一產生新的紀錄編號。如前例,這10筆紀錄的dense_rank值分別依序為1, 1, 1, 2, 2, 3, 4, 5, 6, 7,也就是第1, 2, 3筆紀錄並列第一,第4, 5筆紀錄並列第二,保持一組連續不斷號的dense_rank值。

7. CTE (Common Table Express) CTE是利用Select敘述所產生一個暫存的紀錄集,可用於外部重複參考或自我參考找出從屬關係的遞迴查詢等。
a. 定義CTE
CTE
With Products_CTE(ID, No)As
(Select ProductID, ProductNo From Products)
其中With之後為CTE名稱,As之後為CTE的主體,用於產生暫存的紀錄集。

b.外部參考CTE,使用CTE名稱參考暫存的紀錄集。
Select * From Products_CTE

SQL Server 2005的 T-SQL 語言比前個版本提供了更強大的功能和靈活性。例如上述介紹的TRY/CATCH結構進行錯誤處理、SNAPSHOT 隔離和CTE,此外還有Waitfor BULK、遞迴查詢、PIVOT、UNPIVOT與APPLY、DDL Trigger...等等。

 

 

SQL Server 2005 最大容量规范

 SQL Server 2005 数据库引擎对象 最大大小/数量 SQL Server 2005(32 位) 最大大小/数量 SQL Server 2005(64 位) ...
  • cxzhq2002
  • cxzhq2002
  • 2014年05月27日 16:37
  • 764

【SQL Server】SQL2005的安装与配置、简单使用

印象中,以前电脑不发达,自身编程经历不多的时候,由于Microsoft SQL Server版本众多,在不同版本的windows下必须要求装相应版本的SQL Server,否则有可能出现兼容性的问题,...
  • yongh701
  • yongh701
  • 2015年12月29日 20:30
  • 7755

Microsoft SQL Server 2005简体中文开发版下载说明

Microsoft SQL Server 2005简体中文开发版下载 正 文:     由于飘易手里有项目需要用到Microsoft SQL Server 20...
  • haiross
  • haiross
  • 2014年06月26日 14:02
  • 1815

win7系统安装SQL Server 2005开发版步骤详解

win7系统安装SQL Server 2005开发版步骤详解 来自大牛:http://www.cnblogs.com/icewee/articles/2019783.html 补充知识:虚...
  • zhangdong305
  • zhangdong305
  • 2015年04月27日 22:55
  • 1335

如何使 SQL Server高效 --T-SQL(ITPUT 讨论汇总)

2、      您认为在T-SQL编写(包括存储过程、函数和视图)上,哪些因素会影响SQL Server效率?讨论汇总——索引使用l  没有索引或者没有用到索引、I/O吞吐量小、没有创建计算列导致查询...
  • zjcxc
  • zjcxc
  • 2013年05月27日 15:47
  • 11683

SQL语言和T-SQL语言简介

原文地址:https://www.2cto.com/database/201505/400750.html SQL语言简介 结构化查询语言(SQL)是一个非过程化的语言,它一次处理一个...
  • tanga842428
  • tanga842428
  • 2016年10月10日 00:13
  • 5698

SQL Server 2005 在局域网中共享数据库——Sql Server 2005的1433端口打开和进行远程连接

http://blog.163.com/kewangwu%40126/blog/static/867284712009101972828708/     如何打开sql server2005的1...
  • zunguitiancheng
  • zunguitiancheng
  • 2014年12月17日 18:04
  • 459

SQL Server 2005将某些数据库行为设置为与指定的 SQL Server 版本兼容

语法 sp_dbcmptlevel [ [ @dbname = ] name ]     [ , [ @new_cmptlevel = ] ...
  • lucky51222
  • lucky51222
  • 2014年09月15日 11:00
  • 2620

SqlServer2005分页方案,很实用,很快!

1、为什么要使用row方案: 在oracle里有row_number虚列, mySql有limit关键字分页, 他们都有一个比较通用的分页方案, 使得hibernate等类似的程序可以拼接sq...
  • johennes
  • johennes
  • 2013年06月21日 16:51
  • 853

《SQL Server 2005 编程入门经典》学习笔记

第一章 RDBMS基础:SQL Server数据库构成 数据库中的对象 数据库管理系统中包含许多对象。对于SQL Server,它常包含以下重要的数据库对象: 数据库 索引 事务日志 程序集 表 ...
  • hehe6378
  • hehe6378
  • 2014年03月03日 18:01
  • 1133
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SQL Server 2005 T-SQL的增強功能
举报原因:
原因补充:

(最多只允许输入30个字)