簡體   English   中英

由於轉義了字符,SQL查詢無法執行

[英]SQL query does not executes because of escaped characters

假設我有這樣的sql查詢:

SELECT column_name FROM table WHERE columnid <= 5

在orm.xml中定義如下:

<named-query>
  <query>
    sql query
  </query>
</named-query>

環境說,由於<字符,xml格式不正確。 因此,我用谷歌搜索了一下,然后發現,如以下示例所示,我必須轉義字符

< = &lt , > = &gt

但是當我忽略這些字符時,查詢不會執行。 由於轉義,這是無效的。 您是否知道如何解決此問題或任何解決方法?

不知道它是否仍然打開,但是-至少-它沒有答案:

您不應將XML視為帶有多余多余字符的字符串。 將內容放入 XML有一些規則, XML 內部讀取值也有一些規則。 您可以輕松地創建一些東西, 看起來像串級XML,而是-如果你的XML IST無效的-你會陷入麻煩。

最重要的例外是-很明顯! - <, > and & ,如果不轉義,將會打亂標記。

DECLARE @xml XML=N'<root>SELECT column_name FROM table WHERE columnid &lt;= 5</root>';
SELECT @xml.value(N'(/root/text())[1]',N'nvarchar(max)');

您會發現,轉義的字符被隱式重新轉換。 但是您必須使用適當的工具閱讀XML! 如果使用字符串方法(如substring )讀取XML,則必須確保重新轉義。

有一個-不推薦-解決方法:你可以使用一個CDATA -section喜歡這里:

DECLARE @xml XML=N'<root><![CDATA[SELECT column_name FROM table WHERE columnid <= 5]]></root>';
SELECT @xml.value(N'(/root/text())[1]',N'nvarchar(max)');

這允許你把文成XML將被采取原樣 但這已經過時,並且在SQL Server中不直接支持(嗯,有FOR XML EXPLICIT ,它本身已經過時了)。 SQL-Server實際上會自動將上面沒有CDATA存儲為轉義字符串。 在語義上是相同的...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM