繁体   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