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

SQL Server T-SQL 指令大全速查表:DML、DDL、DCL、流程控制與函數完整分類

     編輯:關於SqlServer

本文彙整 SQL Server 常用 T-SQL 指令分類速查,涵蓋資料操作、定義、控制、交易、程序化 SQL、變數、流程控制、查詢、統計、日期、系統函數等核心語法,適合開發與維護時快速查閱。

一、指令分類總覽

分類關鍵字說明
DML
資料操作
SELECT, INSERT, UPDATE, DELETE, MERGE查詢、新增、修改、刪除、合併資料列
DDL
資料定義
CREATE/ALTER/DROP TABLE/VIEW/INDEX/PROCEDURE/TRIGGER/SCHEMA/DOMAIN建立、修改、刪除資料庫結構物件
DCL
資料控制
GRANT, DENY, REVOKE授予、拒絕、收回權限
TCL
交易控制
COMMIT, ROLLBACK, SAVEPOINT, SET TRANSACTION提交、回滾、儲存點、設定交易特性
程序化 SQLDECLARE, OPEN, FETCH, CLOSE, PREPARE, EXECUTE, DESCRIBE, EXPLAIN游標操作、動態 SQL 準備執行

二、變數宣告與賦值

-- 區域變數 (批次/程序內)
DECLARE @id CHAR(10);
SET @id = '10010001';           -- 標準賦值
SELECT @id = '10010001';        -- 選賦值 (可同時賦多個)

-- 全域變數 (系統內建,@@ 開頭)
SELECT @@VERSION, @@SERVERNAME, @@ROWCOUNT, @@ERROR, @@IDENTITY, @@TRANCOUNT;

三、流程控制語句

1. IF...ELSE


DECLARE @x INT = 1, @y INT = 2, @z INT = 3;
IF @x > @y 
    PRINT 'x > y';
ELSE IF @y > @z 
    PRINT 'y > z';
ELSE 
    PRINT 'z >= y';

2. CASE 運算式 (較 IF 靈活,可用於 SELECT/UPDATE/SET)


-- 簡單 CASE
UPDATE Employee 
SET Wage = CASE JobLevel 
    WHEN 1 THEN Wage * 1.08
    WHEN 2 THEN Wage * 1.07
    WHEN 3 THEN Wage * 1.06
    ELSE Wage * 1.05 
END;

-- 搜尋 CASE (條件任意)
UPDATE Employee 
SET Bonus = CASE 
    WHEN Wage > 50000 AND Years > 5 THEN 10000
    WHEN Wage > 30000 THEN 5000
    ELSE 1000 
END;

3. WHILE 迴圈與 BREAK/CONTINUE


DECLARE @x INT = 1, @y INT = 1, @c INT;
WHILE @x < 3
BEGIN
    PRINT @x;
    WHILE @y < 3
    BEGIN
        SET @c = 100 * @x + @y;
        PRINT @c;
        SET @y = @y + 1;
    END
    SET @x = @x + 1;
    SET @y = 1;
END

4. WAITFOR 延遲/定時執行


-- 等待 1 小時 2 分 3 秒
WAITFOR DELAY '01:02:03';
SELECT * FROM Employee;

-- 等到 23:08:00 執行
WAITFOR TIME '23:08:00';
SELECT * FROM Employee;

四、核心查詢語法 (SELECT)


-- 基礎查詢
SELECT col1, col2 FROM Table WHERE col1 = 'value' AND col2 > 100;

-- 模糊查詢
WHERE Name LIKE 'Zhang%'           -- 以 Zhang 開頭 (可用索引)
WHERE Name LIKE '%San'             -- 以 San 結尾 (掃描)
WHERE Name LIKE '%Li%'             -- 包含 Li (掃描)
WHERE Code LIKE '[A-Z]%'           -- 字元範圍
WHERE Code LIKE '[^0-9]%'          -- 排除數字開頭

-- 範圍與集合
WHERE Age BETWEEN 18 AND 60
WHERE Status IN (1, 2, 5)
WHERE Status NOT IN (3, 4)

-- 排序
ORDER BY CreateDate DESC, Id ASC
ORDER BY 1, 2  -- 按欄位序號

-- 子查詢 (外層用 IN 防多行)
SELECT * FROM Orders WHERE CustId IN (SELECT CustId FROM Customers WHERE City='Taipei');

-- 連接查詢
SELECT * FROM Table1 t1 LEFT JOIN Table2 t2 ON t1.Id = t2.Id;  -- 左外部連接
SELECT * FROM Table1 t1 RIGHT JOIN Table2 t2 ON t1.Id = t2.Id; -- 右外部連接

-- 集合運算
SELECT Name FROM Table1 UNION   SELECT Name FROM Table2;  -- 去重
SELECT Name FROM Table1 UNION ALL SELECT Name FROM Table2; -- 保留重複

五、資料異動語法 (INSERT/UPDATE/DELETE)


-- INSERT
INSERT INTO Table (Col1, Col2) VALUES ('A', 'B');
INSERT INTO Table (Col1, Col2) SELECT Col1, Col2 FROM OtherTable;

-- UPDATE
UPDATE Table SET Col1 = 'New' WHERE Id = 1;
UPDATE Table SET Col1 = DEFAULT, Col2 = NULL, Col3 = Col3 + 5;

-- DELETE
DELETE FROM Table WHERE Id = 1;
TRUNCATE TABLE Table;        -- 高速清空,重置 IDENTITY,不觸發 Trigger
DROP TABLE Table;            -- 徹底刪除表結構

六、ALTER TABLE 結構變更


ALTER TABLE Table ADD NewCol INT NULL;
ALTER TABLE Table DROP CONSTRAINT DF_Table_Col;  -- 刪除預設約束
ALTER TABLE Table ALTER COLUMN Col VARCHAR(100) NOT NULL;

-- 間接刪除欄位:建新表 → 複製資料 → 刪舊表 → 改名
CREATE TABLE Table_New (Id INT, Name VARCHAR(50));
INSERT INTO Table_New SELECT Id, Name FROM Table;
DROP TABLE Table;
EXEC sp_rename 'Table_New', 'Table';

七、統計彙總函數

函數說明範例
AVG平均值SELECT AVG(Wage) FROM Employee GROUP BY DeptId
COUNT筆數統計COUNT(*) 含 NULL / COUNT(Col) 不含 NULL
MAX/MIN最大/最小值SELECT Name FROM Employee WHERE Wage = (SELECT MAX(Wage) FROM Employee)
SUM加總SELECT SUM(Sales) FROM Orders WHERE Year=2023

八、日期時間函數

函數回傳範例
DAY(date)日 (1-31)DAY(GETDATE())
MONTH(date)月 (1-12)MONTH(GETDATE())
YEAR(date)年YEAR(GETDATE())
DATEADD(interval, number, date)新日期DATEADD(DAY, 7, GETDATE()) 一週後
DATEDIFF(interval, start, end)間隔數DATEDIFF(DAY, StartDate, GETDATE()) 天數差
DATENAME(interval, date)字串DATENAME(MONTH, GETDATE()) → 'January'
DATEPART(interval, date)整數DATEPART(WEEKDAY, GETDATE()) → 2
GETDATE()當前日期時間SELECT GETDATE()

interval 單位:year/yy, quarter/qq, month/mm, dayofyear/dy, day/dd, week/wk, weekday/dw, hour/hh, minute/mi, second/ss, millisecond/ms

九、常用系統函數

函數用途範例
APP_NAME()應用程式名稱SELECT APP_NAME()
COALESCE(v1, v2, ...)第一個非 NULLCOALESCE(Phone, Mobile, 'N/A')
COL_LENGTH('table', 'col')欄位定義長度COL_LENGTH('Customers', 'Name')
COL_NAME(table_id, col_id)欄位名稱COL_NAME(OBJECT_ID('Customers'), 3)
DATALENGTH(expr)實際資料位元組數DATALENGTH(N'中文') → 6
DB_ID('dbname')資料庫 IDDB_ID('master') → 1
DB_NAME(db_id)資料庫名稱DB_NAME(1) → 'master'
HOST_NAME()用戶端機器名SELECT HOST_NAME()
ISDATE(expr)是否合法日期ISDATE('2023-02-30') → 0
ISNULL(expr, replacement)NULL 替換ISNULL(Commission, 0)
ISNUMERIC(expr)是否數值ISNUMERIC('123abc') → 0
NEWID()唯一識別碼SELECT NEWID()
NULLIF(expr1, expr2)相等回 NULLNULLIF(Price, 0)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved