经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MS SQL Server » 查看文章
SQL Server解惑——为什么你拼接的SQL语句换行符失效了?
来源:cnblogs  作者:潇湘隐者  时间:2021/12/15 8:59:24  对本文有异议

 

在SQL Server数据库的维护管理当中,我们经常要用SQL语句生成一些维护操作的SQL语句,例如,我们要批量的修改数据库的恢复模式。如下所示:

 

  1. --===========================================================================================================================
  1. -- ScriptName : change_recovery_model_to_full.sql
  1. -- Author : Kerry
  1. -- CreateDate : 2015-12-18
  1. -- Description : 将用户数据库的恢复模式从简单模式切换为完整模式。
  1. /******************************************************************************************************************
  1. Parameters : 参数说明
  1. ********************************************************************************************************************
  1. ********************************************************************************************************************
  1. Modified Date Modified User Version Modified Reason
  1. ********************************************************************************************************************
  1. 2015-12-18 Kerry V01.00.00 新建该脚本。
  1. *******************************************************************************************************************
  1. 注意事项
  1. SP_EXECUTESQL 执行的脚本里面不能使用GO语句;如果需要执行的话,上面字符串必须去掉GO
  1. *******************************************************************************************************************/
  1. --===========================================================================================================================
  1.  
  1. DECLARE @SQL_TEXT NVARCHAR(MAX) ='';
  1.  
  1. SELECT @SQL_TEXT +=
  1. 'USE master;' + CHAR(10)
  1. + 'GO' +CHAR(10)
  1. + 'ALTER DATABASE ' + QUOTENAME(name) + ' SET RECOVERY FULL WITH NO_WAIT;' + CHAR(10)
  1. + 'GO' +CHAR(10)
  1. FROM sys.databases WITH(NOLOCK)
  1. WHERE recovery_model_desc='SIMPLE'
  1. AND state=0 --0表示ONLINE
  1. AND name NOT IN ('master', 'msdb', 'model','tempdb', 'distribution','ReportServer','ReportServerTempDB')
  1. ORDER BY database_id;
  1.  
  1. 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格式混乱的话,你也可以取消这个选项。其实这个是一个很简单的事情,但是确实有一些同学对这些完全不了解。所以在这里简单的介绍一下。

扫描上面二维码关注我
如果你真心觉得文章写得不错,而且对你有所帮助,那就不妨帮忙“推荐"一下,您的“推荐”和”打赏“将是我最大的写作动力!
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接.

原文链接:http://www.cnblogs.com/kerrycode/p/15685605.html

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号