【问题标题】:XML parsing: line 1, character 7, semicolon expectedXML 解析:第 1 行,第 7 个字符,需要分号
【发布时间】:2013-08-31 06:30:00
【问题描述】:

在 C# 中运行此 XML SQL 时发生错误。缺什么?它在 SQL Server 管理工作室中运行良好,但在 c# 中运行良好。

protected DataTable ServiceCodes(string orderColumn = default(string), bool orderAscending = true)
{
    string sql = @" SELECT DISTINCT(Split.a.value('.', 'VARCHAR(100)')) AS Data  
                             FROM  
                             (
                                 SELECT CAST('<M>' + REPLACE(Text09, ',', '</M><M>') + '</M>' AS XML) AS Data  
                                 FROM  Assets
                                 WHERE Category = 'Service'
                             ) AS A CROSS APPLY Data.nodes ('/M') AS Split(a) ORDER BY Data";

    return DatabaseConnection.ExecuteDataTable(sql, 120000);
}

【问题讨论】:

  • 您确定它在 SSMS 中有效吗?我的意思是Split.a.value('.', 'VARCHAR(100)') ??
  • 检查 XML 文本,我希望有一个 &amp;amp; 作为 xml 字符实体的开头(应该以分号结尾)。将其替换为&amp;amp;
  • 是的,它就像 SSMS 中的一种享受。

标签: c# sql sql-server xml sqlxml


【解决方案1】:

我认为您的Text09 专栏中有一些特殊字符。试试这个:

SELECT DISTINCT(Split.a.value('.', 'VARCHAR(100)')) AS Data  
FROM  
(
 SELECT CAST('<M>' + replace((select Text09 + '' for xml path('')), ',', '</M><M>') + '</M>' AS XML) AS Data  
 FROM  Assets
 WHERE Category = 'Service'
) AS A CROSS APPLY Data.nodes ('/M') AS Split(a) ORDER BY Data

sql fiddle demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-09
    • 2021-07-21
    相关资源
    最近更新 更多