我有两个以逗号分隔的列表,我知道它属于一个ID,因此我需要将两个以逗号分隔的列表中的每个对应值插入到具有公共ID的表中。
我有@ listA,@ listB 他们的价值观将是
- @listA =' BRE,CT,DIA,DEXA'
- @listB =' 2.00,3.00,4.00,5.00'
我知道这些值所属的ID,比如说
@规范ID = 1
请告诉我解决此问题的步骤。
答案 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.