我正在使用XML解析将多个参数值传递到存储过程中。
代码创建存储过程:
CREATE PROCEDURE[dbo].[test] @PARAM varchar(max)
AS
DECLARE @PARAMXML AS XML
SET @PARAMXML = cast(('<A>'+replace(@PARAM,',' ,'</A><A>')
+'</A>') AS XML)
拨打参数的代码:
WHERE Field IN (SELECT A.value('.','varchar(max)') FROM @PARAMXML.nodes('A') AS FN(A)
代码执行参数:
exec dbo.test 'Hello, Goodbye, Welcome'
这只会导致" Hello"通过并执行而没有错误。再见和欢迎。这是为什么?我使用了此示例:https://raresql.com/tag/sql-server-passing-multiple-values-though-though-one-parameter-in-a- a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a
问题是,除了第一个单词以外,逗号上的分裂的结果都具有前导空间(演示(,因此您的字符串比较不匹配。
尝试删除空间:
DECLARE @PARAM varchar(max) = 'Hello, Goodbye, Welcome'
DECLARE @PARAMXML AS XML
SET @PARAMXML = cast(('<A>'+replace(@PARAM,',' ,'</A><A>')
+'</A>') AS XML)
SELECT RTRIM(LTRIM(A.value('.','varchar(max)'))) FROM @PARAMXML.nodes('A') AS FN(A)
或替代删除此处的空间:
SET @PARAMXML = cast(('<A>'+replace(@PARAM,', ' ,'</A><A>')
+'</A>') AS XML)