SQL Server解惑——为什么你拼接的SQL语句换行符失效?

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

[[440214]]

本文转载自微信公众号「DBA闲思杂想录」,作者潇湘隐者 。转载本文请联系DBA闲思杂想录公众号。

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

  1. --=========================================================================================================================== 
  2. --  ScriptName    :   change_recovery_model_to_full.sql 
  3. --  Author        :   Kerry  
  4. --  CreateDate    :   2015-12-18 
  5. --  Description   :   将用户数据库的恢复模式从简单模式切换为完整模式。 
  6. /****************************************************************************************************************** 
  7.   Parameters   :         参数说明 
  8. ******************************************************************************************************************** 
  9.  
  10. ******************************************************************************************************************** 
  11.    Modified Date Modified User     Version     Modified Reason 
  12. ******************************************************************************************************************** 
  13.  2015-12-18    Kerry   V01.00.00    新建该脚本。 
  14. ******************************************************************************************************************* 
  15.  注意事项 : 
  16.     SP_EXECUTESQL 执行的脚本里面不能使用GO语句;如果需要执行的话,上面字符串必须去掉GO。 
  17. *******************************************************************************************************************/ 
  18. --=========================================================================================================================== 
  19.  
  20. DECLARE @SQL_TEXT NVARCHAR(MAX) =''
  21.  
  22. SELECT @SQL_TEXT += 
  23.     'USE master;' + CHAR(10)  
  24.   + 'GO' +CHAR(10) 
  25.   + 'ALTER DATABASE ' + QUOTENAME(name)  + ' SET RECOVERY FULL WITH NO_WAIT;' + CHAR(10) 
  26.   + 'GO' +CHAR(10) 
  27. FROM sys.databases WITH(NOLOCK) 
  28. WHERE recovery_model_desc='SIMPLE'  
  29.   AND state=0  --0表示ONLINE 
  30.   AND name NOT IN ('master''msdb''model','tempdb''distribution','ReportServer','ReportServerTempDB'
  31. ORDER BY database_id; 
  32.  
  33. PRINT @SQL_TEXT; 

我们为了生成输出的SQL脚本的格式更漂亮/美观一点,不至于挤到一行或一团,可能经常在拼接时要使用换行符之类的特殊字符,如上所示,我们在拼接SQL语句的时候,我们会使用CHAR(10),有时候也会使用CHAR(9)、CHAR(10)、CHAR(13)这些特殊函数。

  1. CHAR(9)    \t 水平制表符 
  2. CHAR(10)   \r 回车 
  3. CHAR(13)   \n 换行 

但是在一些环境下面,你会发现类似上面SQL可能会“工作”地很正常,但是在一些环境下面,你将拼接生成的SQL拷贝到SSMS的会话窗口或文本文件时,你会发现回车或换行符都失效了,这到底是怎么一回事呢?

其实这个还真跟SSM的环境设置有关,如果你从网格拷贝的时候,换行符或回车符失效了,那么你应该在SSMS的菜单中选项:“选项”-> “查询结果”-> “SQL Server”-> “以网格显示结果”中,勾选“复制或保存时保留CR/LF(E)”选项,如果SSMS是英文环境的话,那么对应的选项为“Retain CR/LF on copy or save”

 

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

 

责任编辑:武晓燕 来源: DBA闲思杂想录
相关推荐

2021-01-07 09:20:08

SQL字符串Server

2010-09-28 16:02:46

替换SQL字段

2010-07-08 13:26:02

SQL Server

2010-11-12 13:08:36

动态sql语句

2010-07-08 13:32:22

SQL Server

2011-07-04 14:28:18

SQL Server分区

2020-08-18 14:10:53

Bash换行符Linux

2018-12-25 14:40:04

SQL ServerSQL语句数据库

2010-09-28 14:06:43

Sql Server表

2010-09-06 13:34:37

Sql Server语句

2010-10-21 12:16:11

SQL Server查

2010-11-11 11:13:54

SQL Server

2024-01-01 08:57:55

ODBCSqlServer数据库

2009-09-03 15:50:20

C#回车换行符

2024-07-09 08:49:56

2021-01-19 05:39:17

SQLServer变量

2009-09-02 14:47:44

C#换行符

2010-09-13 17:11:42

sql server

2010-09-07 11:33:04

SQL语句

2010-10-19 16:06:26

SQL Server索
点赞
收藏

51CTO技术栈公众号