2013-08-28 42 views
3

在C#中運行此XML SQL時發生錯誤。什麼不見​​了?它在SQL Server管理工作室中工作正常,但不在c#中。XML解析:第1行,第7個字符,預期分號

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); 
} 
+0

你確定它在SSMS?我的意思是'Split.a.value('。','VARCHAR(100)')'?? – Nilesh

+2

檢查XML文本,我期望有一個'&'用於啓動一個xml字符實體(它應該以分號結尾)。將其替換爲'&'。 –

+0

是的,它像SSMS中的一種享受。 – Steve

回答

4

我覺得在你的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

相關問題