核心轉義字符
| 函數 | 含義 | ASCII | 典型用途 |
CHAR(10) | 換行符 | LF | Unix/Linux 風格換行 |
CHAR(13) | 回車符 | CR | Mac OS 9 風格 / Windows 配合 LF |
CHAR(13)+CHAR(10) | 回車換行 | CRLF | Windows 標準換行 |
CHAR(9) | 製表符 | TAB | 對齊輸出、CSV 分隔 |
PRINT 語句示例
PRINT 'Test' + CHAR(13) + CHAR(10) + 'Name'; -- 兩行
PRINT 'Col1' + CHAR(9) + 'Col2' + CHAR(9) + 'Col3'; -- 制表對齊
SELECT 結果集輸出 (SSMS 文本模式)
SELECT 'AAA' + CHAR(10) + 'BBB'; -- 兩行
SELECT 'AAA' + CHAR(13) + 'BBB'; -- 兩行 (SSMS 渲染相同)
SELECT 'AAA' + CHAR(13) + CHAR(10) + 'BBB'; -- 標準 CRLF
實戰場景:動態構建多行腳本/郵件正文
DECLARE @Msg NVARCHAR(MAX) = N'';
SELECT @Msg += N'Database: ' + name + CHAR(13) + CHAR(10)
+ N' Size: ' + CAST(size_mb AS VARCHAR) + N' MB' + CHAR(13) + CHAR(10)
+ N' Status: ' + state_desc + CHAR(13) + CHAR(10) + CHAR(13) + CHAR(10)
FROM sys.databases;
PRINT @Msg; -- 或 EXEC msdb.dbo.sp_send_dbmail @body = @Msg, ...
避坑提示
- SSMS「結果以網格顯示」模式下換行符不直觀,需切換「結果以文本顯示」 (Ctrl+T)
- 導出文件時指定編碼 (UTF-8 with BOM) 避免換行符損壞
- 長字符串拼接用
STRING_AGG (SQL 2017+) 或 `FOR XML PATH` 替代循環
