T-SQL多值参数XML仅在第一个值上执行



我正在使用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)

相关内容

最新更新