首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 2005 Beta 2 Transact-SQL 功能(四):APPLY 運算子、外部連接、DRI 擴充、效能與錯誤處理增強

     編輯:關於SqlServer

CROSS APPLY 與 OUTER APPLY

CROSS APPLY 允許外部查詢每列呼叫表值函數,結果集為函數回傳列的交叉乘積。若函數回傳空集,該外部列不出現。OUTER APPLY 類似但保留外部列,函數對應欄位以 NULL 填補。

範例:fn_getsubtree 回傳部門經理下屬樹。SELECT * FROM Departments CROSS APPLY fn_getsubtree(deptmgrid) 會重複部門列;OUTER APPLY 則保留 Gardening 部門(經理為 NULL),對應欄位為 NULL。

實用場景:每組回傳 N 列

函數 fn_getnorders(@custid, @n) 回傳客戶最新 N 筆訂單。SELECT O.* FROM Sales.Customer C CROSS APPLY fn_getnorders(C.CustomerID, 2) O 取每客戶最新兩筆訂單。

相關子查詢中的表值函數

SQL 2005 移除 SQL 2000 限制,允許在相關子查詢內引用表值函數並傳遞外部查詢欄位為參數。範例:找出經理擁有至少三名員工的部門。

DRI 擴充:SET DEFAULT 與 SET NULL

ANSI SQL 定義四種參考動作,SQL 2000 僅支援 NO ACTION、CASCADE。SQL 2005 新增 SET DEFAULT、SET NULL。可在外鍵宣告中結合 ON UPDATE/DELETE 使用。
SET DEFAULT:刪除/更新被參考列時,將參考表對應列設為預設值。
SET NULL:設為 NULL(前提允許 NULL)。

範例:Customers 表含虛擬客戶 DUMMY;Orders 表 customerid CHAR(5) NULL DEFAULT('DUMMY'),外鍵 ON DELETE SET NULL ON UPDATE SET DEFAULT。刪除 FRIDA → 其訂單 customerid 變 NULL;更新 BILLY 為 DOLLY → 其訂單 customerid 變 DUMMY。若刪除 DUMMY 再更新 GNDLF 會報錯(預設值 DUMMY 已不在被參考表)。可查 sys.foreign_keys 檢視外鍵定義動作。

效能與錯誤處理增強

  • BULK 資料列集提供者:OPENROWSET 新增 BULK 選項,可存取關聯格式檔案資料,配合 bcp.exe 格式化檔大幅提升資料載入效能。
  • TRY...CATCH 錯誤處理:結構化錯誤處理架構,取代 @@ERROR 檢查模式,支援巢狀、交易控制、錯誤資訊擷取(ERROR_NUMBER() 等函數)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved