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

Transact-SQL (T-SQL) 核心語法與進階特性深度解析

     編輯:關於SqlServer

Transact-SQL(簡稱 T-SQL) 是 Microsoft SQL Server 與 Sybase Adaptive Server 的專屬擴充語言,建立在 ANSI SQL-92 標準之上,並大量加入程式設計結構、錯誤處理、交易控制與系統管理指令。相當於 Oracle 的 PL/SQL,T-SQL 是撰寫預存程序、觸發器、使用者定義函數、動態 SQL 以及實作資料層商業邏輯的核心工具。

一、 語言架構三大支柱

分類全名核心指令典型用途
DDLData Definition LanguageCREATE / ALTER / DROP建立、修改、刪除資料庫物件(資料表、檢視、預存程序、函數、自訂型別等)
DMLData Manipulation LanguageSELECT / INSERT / UPDATE / DELETE資料的查詢、新增、修改、刪除(CRUD)
DCLData Control LanguageGRANT / REVOKE / DENY權限授與、收回、拒絕,管控資料庫與物件存取安全

T-SQL 支援以分號 ; 分隔多條陳述式,例如:

INSERT INTO MyTable (MyText) VALUES (@MyText); SELECT @@IDENTITY;

二、 控制流程語法——賦予 SQL 程式設計能力

區塊與條件

  • BEGIN ... END:定義陳述式區塊,配合 IF ... ELSE 使用;若區塊內超過一條指令,必須加上 BEGIN/END,否則編譯錯誤。
  • 支援巢狀 IF,邏輯層次清晰。

迴圈

WHILE 是 T-SQL 唯一 的迴圈結構,迴圈本體同樣需以 BEGIN/END 包裹。

跳轉與等待

  • RETURN:立即終止批次或程序執行。
  • WAITFOR DELAY '00:00:10' / WAITFOR TIME '23:59:59':延遲或定時繼續。
  • GOTO Label:無條件跳轉(慎用,易產生義大利麵代碼)。

三、 變數宣告與賦值

DECLARE @v INT;           -- 宣告
SET @v = 50;              -- 純量賦值(ANSI 標準)
SELECT @v = SUM(Qty)      -- 從查詢結果賦值
FROM SaleItemRecords
WHERE SaleID = 53928;

注意:SET 一次只能指派一個變數;SELECT 可同時指派多個變數,且若查詢傳回多列,變數最終值為最後一列的值。

四、 錯誤處理機制演進

機制適用版本特性
RAISERROR所有版本拋出自訂錯誤號、嚴重等級、狀態;可搭配 WITH LOG 寫入錯誤記錄。
PRINT所有版本輸出訊息至用戶端(SSMS「訊息」頁籤),常用於除錯。
TRY ... CATCHSQL Server 2005+結構化例外處理,支援 ERROR_NUMBER()、ERROR_MESSAGE() 等系統函數取得錯誤細節,強烈建議新專案採用。
BEGIN TRY
    -- 高風險操作
    INSERT INTO Accounts (Id, Balance) VALUES (1, -100); -- 假設有 CHECK 約束
END TRY
BEGIN CATCH
    -- 記錄錯誤、回滾交易、拋出或吞噬
    SELECT ERROR_NUMBER() AS ErrNo, ERROR_MESSAGE() AS ErrMsg;
    IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION;
    -- RAISERROR(...); -- 視需求決定是否向上拋出
END CATCH;

五、 實務開發黃金法則

  1. 集合思維優於逐列處理:能用單一 INSERT ... SELECT 或 MERGE 解決,絕不寫游標或 WHILE 迴圈逐筆處理。
  2. 參數化查詢:預存程序與動態 SQL 皆應使用參數(sp_executesql @stmt, N'@p int', @p),防 SQL Injection 並促進計畫重用。
  3. 交易界限最小化:只在必要時開啟交易,盡早提交或回滾,減少鎖定升級與阻塞。
  4. 錯誤處理標準化:全庫統一採用 TRY/CATCH + 集中式錯誤記錄表,避免錯誤訊息流失。
  5. 版本相容性:使用 COMPATIBILITY_LEVEL 與 sys.dm_exec_describe_first_result_set 驗證語法相容性,升級前務必跑測試套件。

六、 官方文件與持續學習

Microsoft 官方參考文件(含語法圖、範例、最佳實務)請參閱:
Transact-SQL 參考 (Microsoft Learn)

掌握 T-SQL 不僅是記語法,更是理解查詢最佳化器、鎖定機制、交易隔離等級、執行計畫快取等引擎核心行為。建議搭配 SET STATISTICS IO/TIME ON、Execution Plan、Query Store 進行效能調校,將「能跑」升級為「跑得快、穩、可維護」。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved