1. 中文筆畫排序
SELECT * FROM TableName ORDER BY CustomerName COLLATE Chinese_PRC_Stroke_ci_as;
2. 密碼加密與比對
-- 加密
SELECT PWDENCRYPT('plain_pwd');
-- 比對(回傳 1 表相同)
SELECT PWDCOMPARE('plain_pwd', encrypted_pwd);
3. 動態取得表欄位列表
DECLARE @list VARCHAR(1000), @sql NVARCHAR(1000);
SELECT @list = @list + ',' + c.name
FROM sysobjects o JOIN syscolumns c ON o.id = c.id
WHERE o.name = '表A';
SET @sql = 'SELECT ' + RIGHT(@list, LEN(@list)-1) + ' FROM 表A';
EXEC (@sql);
4. 查看磁碟分區可用空間
EXEC master..xp_fixeddrives;
5. 快速比較兩表資料是否相同
IF (SELECT CHECKSUM_AGG(BINARY_CHECKSUM(*)) FROM A) =
(SELECT CHECKSUM_AGG(BINARY_CHECKSUM(*)) FROM B)
PRINT '相等' ELSE PRINT '不相等';
6. 批次殺掉 Profiler/事件探查器進程
DECLARE hcforeach CURSOR GLOBAL FOR
SELECT 'KILL ' + RTRIM(spid) FROM master.dbo.sysprocesses
WHERE program_name IN ('SQL Profiler', N'SQL 事件探查器');
EXEC sp_msforeach_worker '?';
7. 分頁查詢模板(需主鍵 ID)
-- 前 N 筆
SELECT TOP N * FROM 表;
-- N 到 M 筆
SELECT TOP M-N * FROM 表 WHERE ID IN (SELECT TOP M ID FROM 表) ORDER BY ID DESC;
-- 最後 N 筆
SELECT TOP N * FROM 表 ORDER BY ID DESC;
8. 重命名資料庫
EXEC sp_renamedb 'old_name', 'new_name';
9-13. 常用元資料查詢
- 所有用戶表:
SELECT name FROM sysobjects WHERE xtype='U' AND status>=0
- 表欄位:
SELECT name FROM syscolumns WHERE id=OBJECT_ID('表名')
- 相關視圖/SP/函數:
SELECT a.* FROM sysobjects a, syscomments b WHERE a.id=b.id AND b.text LIKE '%表名%'
- 所有預存程序:
SELECT name FROM sysobjects WHERE xtype='P'
- 用戶建立的資料庫:
SELECT name FROM master..sysdatabases WHERE sid != 0x01