使用单个 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
我有两个逗号分隔列表,我知道它们属于一个 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