在Sql中分割字符串并存储在临时表中

时间:2016-07-27 10:44:18

标签: sql-server stored-procedures ssrs-2008-r2

我在3天内遇到问题,实际上,我正在研究SSRS,其中存储过程需要多行参数,即将行拆分为&#39 ;;'和列为','。所以实际上我想用','拆分列。和';'作为行并将进一步插入临时表。任何帮助将非常感激。

EG:来自app:

的存储过程数据作为参数
101,1,1,1,5;
102,1,1,1,4;
103,1,1,1,3;

在存储过程中被接受为Varchar

现在想要将数据拆分为';'一次然后用','每一行。

2 个答案:

答案 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 

答案 1 :(得分: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