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

Transact-SQL 核心語法與常用函數速查手冊

     編輯:關於SqlServer

T-SQL 指令分類速查

資料操作 (DML)

SELECT, INSERT, UPDATE, DELETE, MERGE, BULK INSERT

資料定義 (DDL)

CREATE/ALTER/DROP DATABASE, TABLE, VIEW, INDEX, PROCEDURE, TRIGGER, FUNCTION, SCHEMA, SYNONYM, TYPE, XML SCHEMA COLLECTION

資料控制 (DCL)

GRANT, DENY, REVOKE

交易控制 (TCL)

BEGIN TRANSACTION, COMMIT, ROLLBACK, SAVE TRANSACTION, SET TRANSACTION ISOLATION LEVEL

程序化 SQL / 游標

DECLARE @var, SET/SELECT @var=..., IF/ELSE, CASE, WHILE/BREAK/CONTINUE, WAITFOR, TRY/CATCH, THROW, RAISERROR, PRINT, DECLARE CURSOR, OPEN, FETCH, CLOSE, DEALLOCATE, EXEC/sp_executesql

變數與流程控制範例

區域變數

DECLARE @id CHAR(10);
SELECT @id = '10010001'; -- 或 SET @id = '10010001'

全域變數 (系統函數)

@@ROWCOUNT, @@IDENTITY, @@ERROR, @@TRANCOUNT, @@VERSION, @@SERVERNAME, GETDATE() -- 實為函數

條件判斷

IF @x > @y PRINT 'x > y'
ELSE IF @y > @z PRINT 'y > z'
ELSE PRINT 'z >= y';

CASE 運算式

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

迴圈控制

WHILE @i < 10 BEGIN
    IF @i = 5 BREAK;
    IF @i = 3 BEGIN SET @i += 1; CONTINUE; END
    PRINT @i; SET @i += 1;
END;
WAITFOR DELAY '00:00:10'; -- 等待 10 秒
WAITFOR TIME '23:59:00'; -- 等待至指定時間

核心內建函數分類

彙總函數

AVG, COUNT, COUNT_BIG, SUM, MIN, MAX, STDEV, STDEVP, VAR, VARP, CHECKSUM_AGG

數學/三角函數

ABS, SIGN, ROUND, FLOOR, CEILING, POWER, SQRT, EXP, LOG, LOG10, PI, RAND, SIN, COS, TAN, ASIN, ACOS, ATAN, ATN2, DEGREES, RADIANS

字串函數

函數用途
LEN / DATALENGTH字元數 / 儲存位元組數
SUBSTRING, LEFT, RIGHT擷取子字串
CHARINDEX, PATINDEX搜尋位置 (支援萬用字元 PATINDEX)
REPLACE, STUFF取代 / 刪除並插入
LTRIM, RTRIM, TRIM (2017+)移除前後空白
UPPER, LOWER大小寫轉換
REPLICATE, SPACE重複字串 / 產生空白
REVERSE反轉字串
QUOTENAME加上分隔符 (防注入)
CONCAT, CONCAT_WS (2017+)安全串聯 (自動處理 NULL)
STRING_AGG (2017+)群組串聯彙總
FORMAT (2012+).NET 格式化 (文化特性)

型別轉換

CAST(expr AS datatype)          -- ANSI 標準
CONVERT(datatype, expr, style)  -- T-SQL 擴充,支援日期格式 style
TRY_CAST / TRY_CONVERT (2012+)  -- 失敗回傳 NULL 不報錯

日期時間函數

函數說明
GETDATE() / SYSDATETIME()當前日期時間 (低/高精度)
DATEADD(datepart, number, date)日期加減
DATEDIFF(datepart, start, end)日期差值
DATENAME / DATEPART取得名稱/整數部分 (年月日等)
EOMONTH (2012+)月份最後一天
DATEFROMPARTS / DATETIMEFROMPARTS由組件建構日期
SWITCHOFFSET / TODATETIMEOFFSET時區偏移處理

系統/中繼資料函數

OBJECT_ID, OBJECT_NAME, OBJECT_SCHEMA_NAME, DB_ID, DB_NAME, FILE_ID, FILE_NAME, INDEX_COL, COL_NAME, COL_LENGTH, TYPE_ID, TYPE_NAME, SCHEMA_ID, SCHEMA_NAME, USER_NAME, HOST_NAME, APP_NAME, CONNECTIONPROPERTY, SERVERPROPERTY

條件/邏輯函數

ISNULL(check, replacement)      -- 非 NULL 回傳本身,NULL 回傳替代值
COALESCE(expr1, expr2, ...)     -- 回傳第一個非 NULL (ANSI)
NULLIF(expr1, expr2)            -- 相等回傳 NULL,否則 expr1
IIF(condition, true, false)     -- 簡易三元 (2012+)
CHOOSE(index, val1, val2, ...)  -- 索引選值 (2012+)

JOIN 與集合運算

-- 內連接
SELECT * FROM T1 JOIN T2 ON T1.id = T2.id;

-- 外連接
SELECT * FROM T1 LEFT JOIN T2 ON T1.id = T2.id;
SELECT * FROM T1 RIGHT JOIN T2 ON T1.id = T2.id;
SELECT * FROM T1 FULL JOIN T2 ON T1.id = T2.id;

-- 交叉連接 (笛卡兒積)
SELECT * FROM T1 CROSS JOIN T2;

-- 集合運算
SELECT col FROM T1 UNION SELECT col FROM T2;      -- 去重
SELECT col FROM T1 UNION ALL SELECT col FROM T2;  -- 保留重複
SELECT col FROM T1 INTERSECT SELECT col FROM T2;  -- 交集
SELECT col FROM T1 EXCEPT SELECT col FROM T2;     -- 差集 (T1 有 T2 無)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved