2016-07-27 68 views
1

自3天以來,我面臨一個問題,實際上,我正在研究SSRS,其中存儲過程需要多行參數,即將行分割爲';'和列爲','。所以實際上我想用','和';'分隔列作爲行,並將進一步插入到臨時表中。任何幫助將非常感激。在Sql中分割字符串並存儲在臨時表中

EG:在數據存儲過程來作爲參數從應用程序:

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

接受爲在存儲過程Varchar

現在想分割數據爲';'一次,然後用','表示每一行。

回答

0

如果我正確理解的問題,數據以基於字符串的行和列是必需的,分裂與列「」和‘;’爲行

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來做到這一點。下面是使用XML,

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中做過了,我想要一些不同的方法。 –

相關問題