前言
SQL Server 2005 引入大量新功能,內建函數、系統預存程序、固定伺服器/資料庫角色成為日常開發運維核心工具集。本文彙整分類速查表,涵蓋日期/字串/系統/轉換函數、全域變數、百餘支系統預存程序用途、角色權限矩陣,供快速查閱。
一、日期時間函數
| 函數 | 說明 |
DATEADD(datepart, number, date) | 日期加減,回傳新 datetime |
DATEDIFF(datepart, start, end) | 跨越的日期/時間邊界數 |
DATENAME(datepart, date) | 指定部分的字串名稱 (如 'January') |
DATEPART(datepart, date) | 指定部分的整數值 |
DAY(date), MONTH(date), YEAR(date) | 對應部分整數 |
GETDATE() | 目前系統日期時間 (低精度) |
GETUTCDATE() | 目前 UTC 時間 |
SYSDATETIME(), SYSUTCDATETIME() | 高精度 (100ns) 日期時間 (SQL 2008+) |
datepart 常用值:year/yy/yyyy, quarter/qq/q, month/mm/m, dayofyear/dy/y, day/dd/d, week/ww/wk, weekday/dw, hour/hh, minute/mi/n, second/ss/s, millisecond/ms。
二、字串處理函數
| 函數 | 說明 |
LOWER(str), UPPER(str) | 大小寫轉換 |
LTRIM(str), RTRIM(str), TRIM(str) (2017+) | 去除前導/尾隨/兩側空白 |
SUBSTRING(str, start, length) | 擷取子字串 (1-based) |
CHARINDEX(find, str[, start]) | 搜尋字串位置 |
REPLACE(str, old, new) | 取代字串 |
LEN(str), DATALENGTH(str) | 字元數 / 位元組數 |
LEFT(str, n), RIGHT(str, n) | 左/右 n 字元 |
STUFF(str, start, len, new) | 刪除並插入 |
REPLICATE(str, n) | 重複 n 次 |
FORMAT(value, format[, culture]) (2012+) | .NET 格式化字串 |
三、數學/轉換/系統函數
| 分類 | 函數 | 說明 |
| 數學 | ROUND(n, d) | 四捨五入 |
FLOOR(n) | 向下取整 |
CEILING(n) | 向上取整 |
ABS(n), SQRT(n), POWER(a, b), RAND([seed]) | 常用數學 |
| 轉換 | CAST(expr AS type) | ANSI 標準轉型 |
CONVERT(type, expr[, style]) | SQL Server 擴充 (含日期格式 style) |
TRY_CAST/TRY_CONVERT/TRY_PARSE (2012+) | 失敗回傳 NULL 不報錯 |
| 系統 | USER_NAME(), SUSER_NAME(), ORIGINAL_LOGIN() | 目前用戶/登入/原始登入 |
DB_NAME([dbid]), DB_ID([name]) | 資料庫名稱/ID 互查 |
OBJECT_NAME(id), OBJECT_ID('name') | 物件名稱/ID 互查 |
四、全域變數 (@@ 開頭)
| 變數 | 說明 |
@@ROWCOUNT | 上一陳述式影響列數 |
@@ERROR | 上一陳述式錯誤號 (舊式) |
@@IDENTITY | 最後插入的識別值 (跨作用域,慎用) |
SCOPE_IDENTITY() | 當前作用域最後識別值 (推薦) |
@@TRANCOUNT | 目前交易巢狀層數 |
@@VERSION | 版本資訊字串 |
@@SERVERNAME | 本地伺服器名稱 |
@@SPID | 目前 Session ID |
@@LANGUAGE, @@DATEFIRST | 語言/週起始日設定 |
@@MAX_CONNECTIONS, @@CONNECTIONS | 最大/累積連線數 |
五、常用系統預存程序分類速查
| 分類 | 程序 | 用途 |
| 資訊查詢 | sp_databases | 列出所有資料庫 |
sp_help [obj] | 物件結構 (欄位、索引、約束...) |
sp_helptext 'proc' | 檢視程序/函數/觸發器/檢視表定義 |
sp_helpindex 'table' | 資料表索引詳細資訊 |
| 資料庫管理 | sp_dboption | 檢視/變更資料庫選項 (棄用,改用 ALTER DATABASE) |
sp_helpdb [db] | 資料庫檔案、大小、選項 |
sp_detach_db / sp_attach_db | 卸離/附加資料庫 |
sp_addumpdevice / sp_dropdevice | 備份裝置管理 |
sp_configure | 執行個體組態選項 |
| 安全性/登入/角色 | sp_addlogin / sp_droplogin | 建立/刪除 SQL 登入 |
sp_grantdbaccess / sp_revokedbaccess | 資料庫用戶對應登入 |
sp_addrole / sp_droprole | 建立/刪除資料庫角色 |
sp_addrolemember / sp_droprolemember | 角色成員管理 |
sp_addsrvrolemember / sp_dropsrvrolemember | 固定伺服器角色成員管理 |
sp_grantlogin / sp_denylogin | Windows 登入授權/拒絕 |
| 鍵/索引 | sp_pkeys 'table' | 主鍵欄位 |
sp_fkeys 'table' | 外鍵關聯 |
sp_helpconstraint 'table' | 所有約束 |
sp_statistics 'table' | 索引/統計資料 |
| 作業/代理 | sp_start_job / sp_stop_job | 啟動/停止 Agent 作業 |
sp_add_job / sp_delete_job | 建立/刪除作業 |
sp_add_jobstep / sp_update_jobstep | 作業步驟管理 |
| 游標 (T-SQL 程序內) | sp_cursoropen / sp_cursorfetch / sp_cursorclose | 伺服器端游標生命週期 |
sp_cursorprepare / sp_cursorexecute / sp_cursorunprepare | 參數化游標準備/執行/釋放 |
sp_settriggerorder | 設定 AFTER 觸發器第一/最後觸發順序 |
六、固定伺服器角色權限矩陣
| 角色 | 核心權限 |
| sysadmin | 執行個體所有活動,跨越所有其他角色,最高權限 |
| serveradmin | 伺服器組態選項 (sp_configure)、關機 |
| setupadmin | 連結伺服器管理、特定系統程序 |
| securityadmin | 登入管理、密碼重設、審計讀取 |
| processadmin | KILL 處理序、管理背景程序 |
| dbcreator | CREATE/ALTER/DROP DATABASE |
| diskadmin | 磁碟檔案管理 (資料/記錄檔擴充) |
| bulkadmin | BULK INSERT / OPENROWSET(BULK...) |
七、固定資料庫角色權限矩陣
| 角色 | 核心權限 |
| public | 每個用戶隸屬,不可移除,捕獲資料庫預設權限基線 |
| db_owner | 資料庫所有活動 (含 DDL、安全性、備份、複寫...),跨越所有其他資料庫角色 |
| db_accessadmin | 資料庫用戶/角色增刪 |
| db_datareader | 所有使用者表 SELECT |
| db_datawriter | 所有使用者表 INSERT/UPDATE/DELETE |
| db_ddladmin | 所有 DDL (CREATE/ALTER/DROP 物件) |
| db_securityadmin | 角色成員、權限、應用程式角色管理 |
| db_backupoperator | BACKUP DATABASE/LOG, DBCC, CHECKPOINT |
| db_denydatareader | 拒絕 SELECT (優先級高於授與) |
| db_denydatawriter | 拒絕 INSERT/UPDATE/DELETE |
八、實務建議
- 最小權限原則:應用程式帳號僅授
db_datareader/db_datawriter 或自訂角色 + EXECUTE 預存程序,嚴禁 sysadmin/db_owner。
- 避免直接授予 public:public 權限影響所有用戶,僅授予極基礎權限 (如
VIEW DEFINITION)。
- 定期審計:
SELECT * FROM sys.server_role_members rm JOIN sys.server_principals r ON rm.role_principal_id = r.principal_id JOIN sys.server_principals m ON rm.member_principal_id = m.principal_id; 檢查伺服器角色成員;資料庫角色同理查 sys.database_role_members。
- 善用 TRY_CAST/TRY_CONVERT:資料清洗、ETL 中避免轉型失敗中斷批次。
結語
熟記核心函數語法、系統程序用途、角色權限邊界,是 SQL Server 開發運維的基本功。將本速查表加入團隊知識庫,新人入職必讀、資安稽核必核、架構設計必查,能有效避免權限過度、函數誤用、程序重複造輪子等常見問題。