2016-07-27 20 views
1

3日後から問題に直面していますが、実際にはストアドプロシージャが複数の行のパラメータを必要とする、つまり行を ';'列を '、'とします。実際には、 '、'、 ';'で列を分割したいと思います。行として追加し、さらに一時表に挿入します。どんな助けでも本当に感謝します。Sqlの文字列を分割してテンポラリテーブルに格納

EG:アプリからパラメータとしてストアドプロシージャに来るデータは:

101,1,1,1,5; 
102,1,1,1,4; 
103,1,1,1,3; 

ストアドプロシージャでVarcharとして受け入れました。

ここで、データを ';'すべての行に対して '、'を付けて一度だけ使用します。

答えて

0

が「」で列を分割して、XMLです 『;』行

DECLARE @PARAM_STRING VARCHAR(100)='101,1,1,1,5; 102,1,1,1,4; 103,1,1,1,3;11,11,11,11,11;12,12,12,12,12;' 
DECLARE @DYNAMIC_QUERY VARCHAR(MAX) 
DECLARE @TABLE TABLE(ID INT,DATA VARCHAR(MAX)) 
INSERT INTO @TABLE 
SELECT 1 ID, 'SELECT '+DATA FROM (
SELECT A.B.value('.','VARCHAR(50)')DATA FROM 
(SELECT CAST('<A>'+REPLACE(@PARAM_STRING,';','</A><A>')+'</A>' AS XML)COL)T 
CROSS APPLY T.COL.nodes('/A') AS A(B))F WHERE DATA<>'' 
SELECT @DYNAMIC_QUERY=STUFF((SELECT ' UNION ' + CAST(DATA AS VARCHAR(MAX))  [text()]FROM @TABLE WHERE ID = t.ID 
    FOR XML PATH(''), TYPE).value('.','NVARCHAR(MAX)'),1,7,' ') 
FROM @TABLE t GROUP BY ID 
EXECUTE(@DYNAMIC_QUERY) 

結果:

(No column name) (No column name) (No column name) (No column name) (No column name) 
11     11     11     11     11 
12     12     12     12     12 
101     1     1     1     5 
102     1     1     1     4 
103     1     1     1     3 
+0

こんにちは、本当にありがとう、私は何を探していますか?貴重な時間をありがとう。 –

1

これを行うには、xml、cte、またはloopを使用する方法があります。以下、私が正しく質問を理解している場合、データを文字列に基づいて、行と列に必要とされる

DECLARE @ParamStr VARCHAR(500) = '101,1,1,1,5; 102,1,1,1,4; 103,1,1,1,3;' 
    DECLARE @x XML 
    SELECT @x = CAST('<R><SemiCol><Comma>'+ REPLACE(REPLACE(@ParamStr,';','</Comma></SemiCol><SemiCol><Comma>'),',','</Comma><Comma>')+ '</Comma></SemiCol></R>' AS XML) 

    SELECT t.value('.', 'int') AS inVal 
    FROM @x.nodes('R/SemiCol/Comma') AS x(t) 
    WHERE LEN(t.value('.', 'varchar(10)')) > 0 
+0

ご提供問合せは、単一の列にデータを提供します。しかし、私が質問を正しく理解していれば、文字列に基づいて行と列にデータが必要です。私は以下のように私の答えを提供しています。 –

+0

私はすでにXMLでやった、私はいくつかの異なるアプローチが欲しい。 –

関連する問題