XML解析:第1行,第63个字符,预期字符串文字

时间:2014-01-16 13:08:10

标签: sql-server xml

执行Iam面临错误的程序时

XML解析:第1行,第63个字符,预期字符串文字

`

DECLARE @return_value int

EXEC    @return_value = [dbo].[Icn_GetResultCountForAllAdvancedSearch]
        @sqtype = 1,
        @UserID = 615,
        @AdvancedSearchQuery = N'<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Searches xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\r\n  <Search SearchId=\"2447\" Query=\" where   ([FLD5283] IS NOT NULL and [FLD5283] &lt;&gt; '''')   and 5263 IN (Select FieldID from Icn_ContractFieldsEntry icfe where icfe.ContractID=z1.ContractID)    AND ( Archive &lt;&gt;''true'' OR Archive is null)\" />\r\n  <Search SearchId=\"2439\" Query=\" where   ([FLD5399] IS NOT NULL and [FLD5399] &lt;&gt; '''')     AND ( Archive &lt;&gt;''true'' OR Archive is null)\" />\r\n  <Search SearchId=\"2386\" Query=\" where   ([ContractId] IS NOT NULL and (case when CONVERT(varchar(max),[ContractId])='''' then ''0'' else [ContractId] end) &lt;&gt; (''0''))    AND ( Archive &lt;&gt;''true'' OR Archive is null)\" />\r\n</Searches>'

SELECT  'Return Value' = @return_value

GO

`

1 个答案:

答案 0 :(得分:2)

您在此处显示的文字:

@AdvancedSearchQuery = N'<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Searches ...>\r\n</Searches>'

不是SQL Server知道如何处理的有效XML片段。 \"转义符让人想起如何在C#字符串中转义"个字符。 SQL中"不需要这样的转义,因为它的字符串分隔符是'。类似地,\r\n看起来像C#(或C等)转义序列,SQL服务器字符串中不支持它。

要在SQL字符串中添加换行符,只需在不关闭字符串的情况下输入换行符,或在适当的位置追加CHAR(13) + CHAR(10)的字符串 - 但要使用第二种形式,您需要构造{{ 1}}与调用存储过程分开 - 您可以在调用过程时传递参数或字符串文字,而不是表达式。