【问题标题】:SQL Server turn off or handle backslash remove newlineSQL Server 关闭或处理反斜杠删除换行符
【发布时间】:2017-10-19 09:22:49
【问题描述】:

(Backslash) (Transact-SQL) 所述,您可以将\ 作为行尾插入以更好地阅读,而INSERT INTO 将删除文本。

如果我不想要这种行为,该如何处理?

例子:

INSERT INTO [table] ([column]) VALUES ('---
:path c:\test\
:param another_string')

本栏目目前的结果:

---
:path c:\test\:param another_string

当然我可以在这个例子中修改我的 SQL 语句,但它显示的数据可能来自任何输入。

【问题讨论】:

  • 在使用 SSMS 时,您至少可以手动解决它。如果以编程方式构建 SQL,这实际上是一个真正的问题。 Atm 我唯一的想法是通过用 Char(92) 替换任何行尾的任何尾随反斜杠来预处理数据以保持持久性。但这对于解决 MSSQL 的便利功能来说似乎有点过头了。
  • 你能提供一个更完整的例子吗?您没有描述您在何处/如何准确输入这些命令以及您希望它们做什么。
  • 旧帖但正面临问题:spin.atomicobject.com/2008/03/18/…

标签: sql-server backslash


【解决方案1】:

如果反斜杠紧跟换行符,它只会继续当前行。在正常情况下,这应该不是问题,除非您忘记了结束引号。

如果您以编程方式访问 SQL,请使用准备好的语句来确保您可以安全地传递任何字符串而不会破坏 SQL。

【讨论】:

  • 这也是我已经做过的工作。这将导致在适配器(例如 Free-TDS)的非常低级别上以编程方式搜索和替换换行符。
  • 如果您的数据可以来自您无法控制的任何输入,则它始终可以包含特殊字符,例如引号、反斜杠或--。如果你只是复制粘贴而不转义,它可能会破坏你的 SQL(更不用说 SQL 注入攻击)。这是使用准备好的语句的主要原因之一。如果你使用 SSMS,你必须自己做。你也可以试试@'xxx' 语法。
  • 您错过了主题。当然,任何当前可用的框架都会检查此类内容以防止注入等。但是您可以简单地产生这种行为,创建一个存储过程来插入任何文本。关键是如何确保这个问题可以直接在 SQL 服务器上处理,因为它是一个我认识的人都不需要但会带来很多麻烦的功能。
【解决方案2】:
INSERT INTO [table] ([column]) VALUES (N'---
:path c:\test\' + CHAR(13) + '
:param another_string')

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2020-10-21
  • 2019-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-28
相关资源
最近更新 更多