SQL Server (T-SQL) 開發中,高頻需求往往有「一行搞定」的系統函數或系統表查詢。本文匯總 14 類實用技巧,含代碼可直接落地。
SELECT * FROM Customer
ORDER BY CustomerName COLLATE Chinese_PRC_Stroke_CI_AS;
-- 加密(僅演示,生產請用 HASHBYTES + SALT)
SELECT PWDENCRYPT('plain_pwd'); -- 返回 varbinary
SELECT PWDCOMPARE('plain_pwd', 0xHash); -- 1=匹配, 0=不匹配
現代最佳實踐: HASHBYTES('SHA2_256', CONCAT(salt, pwd)) + 獨立 salt 欄位。
DECLARE @cols NVARCHAR(MAX), @sql NVARCHAR(MAX);
SELECT @cols = STRING_AGG(QUOTENAME(name), ',') -- SQL 2017+
FROM sys.columns WHERE object_id = OBJECT_ID('TableA');
SET @sql = 'SELECT ' + @cols + ' FROM TableA';
EXEC sp_executesql @sql;
EXEC master..xp_fixeddrives;
IF (SELECT CHECKSUM_AGG(BINARY_CHECKSUM(*)) FROM TableA)
= (SELECT CHECKSUM_AGG(BINARY_CHECKSUM(*)) FROM TableB)
PRINT '相等';
ELSE PRINT '不相等';
DECLARE cur CURSOR FOR
SELECT 'KILL ' + CAST(spid AS VARCHAR)
FROM master.dbo.sysprocesses
WHERE program_name IN ('SQL Profiler', 'SQL 事件探查器');
OPEN cur;
DECLARE @cmd VARCHAR(100);
FETCH NEXT FROM cur INTO @cmd;
WHILE @@FETCH_STATUS = 0 BEGIN
EXEC(@cmd);
FETCH NEXT FROM cur INTO @cmd;
END
CLOSE cur; DEALLOCATE cur;
-- 1. 前 N 條
SELECT TOP N * FROM T ORDER BY ID;
-- 2. N 到 M 條(巢狀 TOP)
SELECT TOP (M-N+1) * FROM T
WHERE ID IN (SELECT TOP M ID FROM T ORDER BY ID)
ORDER BY ID DESC;
-- 3. 最後 N 條
SELECT TOP N * FROM T ORDER BY ID DESC;
現代寫法 (2012+): ORDER BY ID OFFSET @offset ROWS FETCH NEXT @pageSize ROWS ONLY
EXEC sp_renamedb 'old_name', 'new_name';
SELECT name FROM sys.objects WHERE type = 'U' AND is_ms_shipped = 0;
SELECT name FROM sys.columns WHERE object_id = OBJECT_ID('TableName');
SELECT DISTINCT o.name, o.type_desc
FROM sys.objects o
JOIN sys.sql_modules m ON o.object_id = m.object_id
WHERE m.definition LIKE '%TableName%';
SELECT name FROM sys.objects WHERE type = 'P' AND is_ms_shipped = 0;
SELECT dbid, name FROM master..sysdatabases WHERE sid <> 0x01;
SELECT column_name, data_type, character_maximum_length
FROM information_schema.columns
WHERE table_name = 'TableName';
善用系統目錄視圖(sys.*、information_schema)與內建函數(CHECKSUM_AGG、STRING_AGG、COLLATE),能將大量運維開發工作化繁為簡。建議收藏備查,並逐步遷移至現代語法(OFFSET-FETCH、STRING_AGG、TRY_CAST 等)。