2012-08-23 1341 views
0
  • 我正在使用Microsoft SQL 。
  • 「Someone」爲我提供了一個INSERT「預定義語句」列表,我不能修改外部SQL(例如使用Python之類的腳本語言)
  • 作爲「某人」我有問題試圖轉義字符類型爲NVARCHAR的字段。

例如說我需要運行下面的SQL語句:SQL丟失用於INSERT語句的轉義字符

INSERT INTO TableX VALUES('John Doe's value') -- This is not working because of single quotes... 

我需要找到一種方法來變換要插入的字符串(John Doe's value),而不使用SQL語句之外的方法。

我unsuccesfully試過類似如下的語句,串聯單引號與REPLACE功能與其它單引號:

INSERT INTO TableX VALUES('' + REPLACE('John Doe's value'), ''', '''' + '') 

或者

INSERT INTO TableX VALUES('''''' + REPLACE(''''''John Doe's value'''''''), '''''', '''''''' + '''''') 

爲了對付逃逸字符,但它不工作。

我寧願使用函數或簡單的東西,而不是使用存儲過程或更復雜的解決方案。

回答

1

我強烈建議您停止接受INSERT語句,並提供具有明確定義的參數和數據類型的存儲過程(如果您在SQL服務器中接受)。否則,你會很容易受到注入攻擊(我同意你的API沒有內部客戶端會這樣做,但你的API將會很脆弱,就是這樣!)。

順便說一句,函數和存儲過程都是類似於這種情況下涉及的複雜性。

+0

是的,我應該避免這種情況。但有時你需要這樣做,即使你知道這不是最好的方法,只是因爲有人告訴你這樣做,而且你不能扭轉關係「主奴隸」。 – TPPZ

+0

儘管這個論點對你沒有幫助,但我認爲這是主人給出「插入」陳述以確保它們是良構的責任,在這種情況下。我在這裏看到的「奴隸」與DBMS本身沒有什麼不同,如果作爲主用戶,我給它一個不正確的SQL,它只是不能執行,並將錯誤拋在我的臉上:) – Vikdor

+0

有時真實世界真的很複雜解決方案在其背景中有歷史。 我應該從MS Word的Mail Marge和MS Excel電子數據表中獲得那些'INSERT'語句。這種方式已經建立並經過了測試(PM,開發人員,QA部門等內部程序)。沒有辦法逃避「開發者」(即新方法將增加成本......)。 我的解決方法是使用MS Excel中的「查找和替換」替換'''替換''',修復此問題。 我想知道是否有更接近程序化的方式... – TPPZ