将行插入具有单个ID的表和两个逗号分隔列表中的行

时间:2015-12-28 07:50:24

标签: sql-server-2008 csv insert

我有两个以逗号分隔的列表,我知道它属于一个ID,因此我需要将两个以逗号分隔的列表中的每个对应值插入到具有公共ID的表中。

我有@ listA,@ listB 他们的价值观将是

  
      
  • @listA =' BRE,CT,DIA,DEXA'
  •   
  • @listB =' 2.00,3.00,4.00,5.00'
  •   

我知道这些值所属的ID,比如说

  

@规范ID = 1

现在我想要的是将数据插入到包含所有三列的表中 enter image description here

请告诉我解决此问题的步骤。

2 个答案:

答案 0 :(得分:1)

第1步:我创建了以下CREATE FUNCTION dbo.SplitString ( @Delimiter VARCHAR(1), @InputString VARCHAR(MAX) ) RETURNS @ListItems TABLE ( RowNumber INT, List VARCHAR(50) ) AS BEGIN DECLARE @Position INT, @RowNumber INT = 1, @ListItem VARCHAR(MAX) WHILE CHARINDEX(@Delimiter, @InputString) > 0 BEGIN SELECT @Position = CHARINDEX(@Delimiter, @InputString) SELECT @ListItem = SUBSTRING(@InputString, 1, @Position-1) INSERT INTO @ListItems SELECT @RowNumber,@ListItem SELECT @InputString = SUBSTRING(@InputString, @Position+1, LEN(@InputString)-@Position) SET @RowNumber = @RowNumber + 1 END INSERT INTO @ListItems Select @RowNumber,@InputString RETURN END ,它接受​​以逗号分隔的列表项和分隔符。它返回拆分值以及RowNumber。

DECLARE @listA VARCHAR(MAX), @listB VARCHAR(MAX), @SpecID INT, @Delimiter VARCHAR(1)

SET @listA= 'BRE,CT,DIA,DEXA'
SET @listB ='2.00,3.00,4.00,5.00'
SET @SpecID = 1
SET @Delimiter = ','

DECLARE @ListItems Table
(
    SpecID INT,
    listA VARCHAR(50),
    listB VARCHAR(50)
)

DECLARE @TableListA Table
(
    RowNumber INT,
    ListA VARCHAR(50)
)

DECLARE @TableListB Table
(
    RowNumber INT,
    ListB VARCHAR(50)
)

INSERT INTO @TableListA
    SELECT * FROM SplitString(@Delimiter,@listA)

INSERT INTO @TableListB
    SELECT * FROM SplitString(@Delimiter,@listB)

INSERT INTO @ListItems 
     SELECT
        @SpecID,
        A.ListA,
        B.ListB
     FROM @TableListA A
     INNER JOIN @TableListB B ON B.RowNumber = A.RowNumber

SELECT * FROM @ListItems

第2步:使用上述功能,我将分隔逗号分隔的列表项并创建了2个表变量。

Map<String, List<SingleSummonerBasicDTO>> summonersMap = new ObjectMapper()
    .readValue(json, new TypeReference<HashMap<String, List<SingleSummonerBasicDTO>>>() {});

请使用SQL Fiddle检查输出:http://sqlfiddle.com/#!6/9e12b/1/0

答案 1 :(得分:0)

你必须这样做:

1) Split using `,`
2) Have 2 arrays 
3) Both need to have the same size so iterate over 1 array
4) Use the index within the loop to insert the values.