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

另外,当你导出查询结果时,如果你不想因为这些换行符或回车符导致CSV或Excel格式混乱的话,你也可以取消这个选项。其实这个是一个很简单的事情,但是确实有一些同学对这些完全不了解。所以在这里简单的介绍一下。


原文始发于微信公众号(DBA闲思杂想录):SQL Server解惑——为什么你拼接的SQL语句换行符失效了?

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/227832.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!