SQL Server解惑——為什么你拼接的SQL語句換行符失效了?


 

在SQL Server數據庫的維護管理當中,我們經常要用SQL語句生成一些維護操作的SQL語句,例如,我們要批量的修改數據庫的恢復模式。如下所示:

 

--===========================================================================================================================
--        ScriptName            :            change_recovery_model_to_full.sql
--        Author                :            Kerry    
--        CreateDate            :            2015-12-18
--        Description            :            將用戶數據庫的恢復模式從簡單模式切換為完整模式。
/******************************************************************************************************************
        Parameters            :                                    參數說明
********************************************************************************************************************
********************************************************************************************************************
   Modified Date    Modified User     Version                 Modified Reason
********************************************************************************************************************
    2015-12-18             Kerry         V01.00.00                新建該腳本。
*******************************************************************************************************************
    注意事項 :
                SP_EXECUTESQL 執行的腳本里面不能使用GO語句;如果需要執行的話,上面字符串必須去掉GO。
*******************************************************************************************************************/
--===========================================================================================================================
 
DECLARE @SQL_TEXT NVARCHAR(MAX) ='';
 
SELECT @SQL_TEXT +=
       'USE master;' + CHAR(10) 
     + 'GO' +CHAR(10)
     + 'ALTER DATABASE ' + QUOTENAME(name)  + ' SET RECOVERY FULL WITH NO_WAIT;' + CHAR(10)
     + 'GO' +CHAR(10)
FROM sys.databases WITH(NOLOCK)
WHERE recovery_model_desc='SIMPLE' 
  AND state=0  --0表示ONLINE
  AND name NOT IN ('master', 'msdb', 'model','tempdb', 'distribution','ReportServer','ReportServerTempDB')
ORDER BY database_id;
 
PRINT @SQL_TEXT;

 

我們為了生成輸出的SQL腳本的格式漂亮一點,不至於擠到一行,可能經常要使用換行符之類的,如上所示,我們在拼接SQL語句的時候,我們會使用CHAR(10),有時候也會使用CHAR(9)、CHAR(10)、CHAR(13)這些特殊函數,

 

CHAR(9)         \t 水平制表符

CHAR(10)        \r 回車

CHAR(13)        \n 換行

 

但是在一些環境下面,你會發現類似上面SQL可能會工作地很正常,但是在一些環境下面,你將拼接生成的SQL拷貝到SSMS的會話窗口或文本文件時,你會發現回車或換行符都失效了,這到底是怎么一回事呢?

 

其實這個還真跟SSM的環境設置有關,如果你從網格拷貝的時候,換行或回車失效了,那么你應該在SSMS的菜單中選項:選項-> 查詢結果-> SQL Server-> 以網格顯示結果中,勾選復制或保存時保留CR/LF(E)選項,如果SSMS是英文環境的話,那么對應的選項為Retain CR/LF on copy or save

 

clip_image001

 

另外,當你導出查詢結果時,如果你不想因為這些換行符或回車符導致CSV或Excel格式混亂的話,你也可以取消這個選項。其實這個是一個很簡單的事情,但是確實有一些同學對這些完全不了解。所以在這里簡單的介紹一下。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM