1

我试图将“存储”作为参数添加到报告服务中。这是我的代码:

DECLARE @Store      nvarchar(MAX)
DECLARE @Delimiter  char
DECLARE @x          XML

IF OBJECT_ID('tempdb..#Store') IS NOT NULL
DROP TABLE #Store

CREATE TABLE #Store
(
Store_No int
)

SET @Delimiter = ','
SET @Store = '3,38'
SELECT @x = CAST('<i>' + REPLACE(@Store, @Delimiter, '</i><i>') + '</i>' AS XML)
INSERT INTO #Store (Store_No)
SELECT
    x.value('.','int')
FROM
    @x.nodes('/*') n(x)

这在我将 1 个数字放入例如 3 时有效,但是,当我放入 2 个或更多时,它给我一个名为“替换函数需要 3 个参数”的错误

知道如何解决这个问题吗?多谢!

4

2 回答 2

2

不知道你的问题是什么,它适用于更长的序列

DECLARE @Store      nvarchar(MAX)
DECLARE @Delimiter  char
DECLARE @x          XML

IF OBJECT_ID('tempdb..#Store') IS NOT NULL
DROP TABLE #Store

CREATE TABLE #Store
(
Store_No int
)

SET @Delimiter = ','
SET @Store = '2,3,4,5,6'
SELECT @x = CAST('<i>' + REPLACE(@Store, @Delimiter, '</i><i>') + '</i>' AS XML)
INSERT INTO #Store (Store_No)
SELECT
    x.value('.','int')
FROM
    @x.nodes('/*') n(x)

    select * from #Store
于 2013-08-08T19:27:08.333 回答
1

完全同意@Roman Pekar -

DECLARE 
      @Store NVARCHAR(MAX)
    , @Delimiter CHAR(1)

IF OBJECT_ID('tempdb.dbo.#Store') IS NOT NULL
    DROP TABLE #Store

CREATE TABLE #Store (Store_No INT)

SELECT 
      @Delimiter = ','
    , @Store = '2,3,4,5,6'

INSERT INTO #Store (Store_No)
SELECT t.c.value('.', 'INT')
FROM (
     SELECT ID = CAST ('<t>' + REPLACE(@Store, @Delimiter, '</t><t>') + '</t>' AS XML)
) r 
CROSS APPLY ID.nodes ('/t') t(c)

SELECT * 
FROM #Store
于 2013-08-09T05:52:29.077 回答