使用单个 ID 和来自两个逗号分隔列表的行将行插入 table

Insert rows into table with single ID and rows from two comma separated lists

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

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

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

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

@SpecID=1

现在我想要的是将数据插入到 table 中,其中包含所有三列,如下所示

请提供解决此问题的步骤。

你必须这样做:

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.

第 1 步: 我创建了下面的 Function,它接受逗号分隔的列表项和分隔符。它 returns 分割值和行号。

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

第 2 步: 使用上述函数,我拆分了逗号分隔的列表项并创建了 2 个 table 变量。

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

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