none
【奇怪问题】SSMS代码粘贴到作业命令框中会变样 RRS feed

  • 问题

  • 该问题在SQL 2012和2008R2下均有发现,先看图:

    这是一段非常简单的代码,当把它整个复制粘贴到作业命令框中后,变成这样:

    注意看命令框中的格式变化,原本分几行的END  GO  IF  完全并在一起去了,当然还有其它变化,不赘述。将光标定位到ENDGO的D和G之间,然后按以左/右方向键移动的话,能感觉到中间有东西,即这些语句并非真正并在一起(仅视觉上并了),所以就不难理解格式变化后的语句仍然能分析成功。


    2012年4月20日 2:06

答案

  • 换行符的问题, 一般换行是同时有两个: 回车(char(13) + 换行 (char(10))

    如果你的脚本因为某种原因, 换行符只有上述两个中的一个, 那么在 ssms 中是正常的, 其他地方就有可能不会换行, 记事本和 Job 的 command 是要两个都有才显示换行的

    • 已标记为答案 ahdung_AI 2012年4月20日 4:09
    2012年4月20日 2:47
  • 你可以找个十六进制编辑的软件查看验证一下, 或者, 你把没有换行的地方删除一下, 让它变成一行, 然后再重新做一次换行, 再巾过去应该就没有问题了

    • 已标记为答案 ahdung_AI 2012年4月20日 4:09
    2012年4月20日 2:49
  • 您好

    您可以使用 UltraEdit 看一下


    歡迎參觀我的Blog.NET菜鳥自救會

    • 已标记为答案 ahdung_AI 2012年4月20日 4:09
    2012年4月20日 2:59
  • 微软在各个工具之前的统一性做得比较差

    除了这个换行符, 文件格式(存储编码)也是一个很头痛的格式, ssms 只支持带标记的文件格式, 记事本则可以根据文件存储信息推断文件格式, 则sql 自带的一个 tablediff 工具却硬是要写一个没有标记的文件出来, 这样 ssms 打开就可能有乱码(更郁闷的是, 微软似乎一向不喜欢 UTF 编码, 而 tablediff 生成的文件就是 UTF编码, 且不带标记的)

    • 已标记为答案 ahdung_AI 2012年4月20日 4:09
    2012年4月20日 3:14

全部回复

  • 接上:

    将这段代码粘贴到记事本中,显示如图:

    这些隐藏的字符浮现了,呈黑方块状,不知道UNICODE是什么。我的代码是在SSMS新建查询环境手写的,换行和空白地方都是自己敲回车和空格键出来的,连TAB键都没用过,装有SQL Prompt代码提示工具,真不知道为什么会产生这些奇怪字符。虽然目前看来没什么影响,但既然会莫名产生不明字符,总让我感觉不踏实,谁知道它什么时候会产生什么字符,万一真影响到语句或语义岂不太可怕。

    还请大大们提供帮助,解答释疑,谢谢!

    2012年4月20日 2:07
  • 换行符的问题, 一般换行是同时有两个: 回车(char(13) + 换行 (char(10))

    如果你的脚本因为某种原因, 换行符只有上述两个中的一个, 那么在 ssms 中是正常的, 其他地方就有可能不会换行, 记事本和 Job 的 command 是要两个都有才显示换行的

    • 已标记为答案 ahdung_AI 2012年4月20日 4:09
    2012年4月20日 2:47
  • 你可以找个十六进制编辑的软件查看验证一下, 或者, 你把没有换行的地方删除一下, 让它变成一行, 然后再重新做一次换行, 再巾过去应该就没有问题了

    • 已标记为答案 ahdung_AI 2012年4月20日 4:09
    2012年4月20日 2:49
  • 您好

    您可以使用 UltraEdit 看一下


    歡迎參觀我的Blog.NET菜鳥自救會

    • 已标记为答案 ahdung_AI 2012年4月20日 4:09
    2012年4月20日 2:59
  • 微软在各个工具之前的统一性做得比较差

    除了这个换行符, 文件格式(存储编码)也是一个很头痛的格式, ssms 只支持带标记的文件格式, 记事本则可以根据文件存储信息推断文件格式, 则sql 自带的一个 tablediff 工具却硬是要写一个没有标记的文件出来, 这样 ssms 打开就可能有乱码(更郁闷的是, 微软似乎一向不喜欢 UTF 编码, 而 tablediff 生成的文件就是 UTF编码, 且不带标记的)

    • 已标记为答案 ahdung_AI 2012年4月20日 4:09
    2012年4月20日 3:14
  • 谢谢大家的热心帮助,把代码粘贴到notepad++中→显示全部字符,如图:

    如邹健兄所说,出现问题的地方的确是只有一个换行标记,而且在SSMS中将代码保存为一个sql文件后,再用SSMS打开就会提示:

    点【是】后再粘贴到作业中就不会变样了。但真的很操蛋,明明手写的代码,怎么会缺少换行标记,而且SSMS好像没有显示所有符号的功能,只有等粘贴到作业中才能发现问题,但当代码较多的时候未必能看得出来,我最担心的是这类莫名的变化在极其巧合的情况下导致语义发生变化~但愿不会。谢谢大家!

    2012年4月20日 4:08