2017-10-19 123 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 –