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)

これは、3などの1つの数値を入力すると機能しますが、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 に答える