首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >由于转义字符,SQL查询不执行。

由于转义字符,SQL查询不执行。
EN

Stack Overflow用户
提问于 2017-09-11 08:20:34
回答 1查看 150关注 0票数 0

假设我有这样的sql查询:

代码语言:javascript
复制
SELECT column_name FROM table WHERE columnid <= 5

在orm.xml中定义如下:

代码语言:javascript
复制
<named-query>
  <query>
    sql query
  </query>
</named-query>

环境中说,由于<字符,xml格式不太好。于是我在googled上搜索解释,我发现我必须转义字符,如下例所示

代码语言:javascript
复制
< = &lt , > = &gt

但是,当我导出这些字符时,查询不会执行。这是无效的,因为逃跑了。请您知道如何解决这个问题或解决问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-14 09:30:52

不知道它是否还开着,但是--至少--它还没有答案:

您不应该认为XML是一个带有额外字符的字符串。将内容放入XML中有一些规则,从XML内部读取值也有一些规则。您可以很容易地在字符串级别创建类似于XML的东西,但是--如果xml列表无效--您将陷入麻烦。

最重要的例外是-显然!- <, > and &,如果不是转义的话,它会干扰标记。

代码语言:javascript
复制
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:

代码语言:javascript
复制
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中,这将被视为-is。但这是过时的,在Server中不直接支持(好吧,FOR XML EXPLICIT本身就过时了)。实际上,Server将在不使用CDATA的情况下自动将其存储为转义字符串。语义上是一样的..。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46151143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档