执行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] <> '''') and 5263 IN (Select FieldID from Icn_ContractFieldsEntry icfe where icfe.ContractID=z1.ContractID) AND ( Archive <>''true'' OR Archive is null)\" />\r\n <Search SearchId=\"2439\" Query=\" where ([FLD5399] IS NOT NULL and [FLD5399] <> '''') AND ( Archive <>''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) <> (''0'')) AND ( Archive <>''true'' OR Archive is null)\" />\r\n</Searches>'
SELECT 'Return Value' = @return_value
GO
`
答案 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}}与调用存储过程分开 - 您可以在调用过程时传递参数或字符串文字,而不是表达式。