2017-10-19 117 views
0

如此处所述(Backslash) (Transact-SQL)您可以插入\作为行尾以更好地阅读,并通过INSERT INTO删除文本。SQL Server关闭或处理反斜杠删除换行

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

例子:

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

在此列的那一刻当前的结果:

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

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

+0

当你使用SSMS时,你至少可以手动解决它。如果SQL以编程方式构建,它实际上是一个真正的问题。 Atm我唯一的想法是通过用Char(92)替换任何行末尾的反斜杠来预处理数据以保持数据。但这似乎矫枉过正,可以解决MSSQL的便利功能。 – neongrau

+0

你能提供一个更完整的例子吗?您没有描述您在何处/如何输入这些命令,以及您希望他们做什么。 – jurez

+0

旧帖子,但完全面临问题:https://spin.atomicobject.com/2008/03/18/trailing-backslash-problem-and-fix-for-rails-and-sqlserver-2005/ – YvesR

回答

0

如果紧跟着一个换行符,反斜杠将只会继续当前行。在正常情况下,除非您忘记收盘报价,否则这不应该成为问题。

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

+0

这是一个工作我也已经做过了。这将导致以编程方式在适配器(例如Free-TDS)中以非常低的级别搜索和替换新行。 – YvesR

+0

如果您的数据可能来自您无法控制的任何输入,则它始终可以包含特殊字符,例如引号,反斜杠或'--'。如果您只是在不转义的情况下进行复制粘贴,它可能会破坏您的SQL(更不用说SQL注入攻击)。这是使用准备好的语句的主要原因之一。如果你使用SSMS,你必须自己动手。您也可以尝试@'xxx'语法。 – jurez

+0

你错过了这个话题。当然,任何当前可用的框架都会检查这样的内容以防止注入等。但是,您可以简单地生成此行为,从而创建一个存储过程,以获取要插入的任何文本。关键是如何确保这个'''问题可以直接在SQL服务器上处理,因为它是一个功能,并不是我认识的任何人都需要,但会造成很多麻烦。 – YvesR

0
INSERT INTO [table] ([column]) VALUES (N'--- 
:path c:\test\' + CHAR(13) + ' 
:param another_string') 
+0

这是我已经做的一项工作。这将导致以编程方式在适配器(例如Free-TDS)中以非常低的级别搜索和替换新行。 – YvesR

+0

https://meta.stackoverflow.com/questions/300837/what-c​​omment-should-i-add-to-code-only-answers –