我正在使用以下查询插入一个JunctionTable,用于匹配一个yellowpages目录的2个表(Listing& Categories)。
任何给定的清单都可以归为一个或多个类别。
以下查询将3个记录插入到我的Junction表中,但有1个问题。我有3个字段(ID,Junc_LID,Junc_CatID)代表我的另外两个表中的ID列LID是列表ID,而CatID是类别ID。
运行查询是在CatID字段中添加3条带1,2,43,34的记录,而不是每次插入4次不同的catID。
因此,如果用户从我的网络表单中选择10个类别。对于用户选择的每个类别,查询应循环10次,将10行插入到我的JunctionTable 1中。每个插入输入1个CatID,而不是现在用逗号分隔的所有类别的字符串。
DECLARE @cnt INT = 0;
WHILE @cnt < 3
BEGIN
INSERT INTO BND_ListingJunction_testing (Junc_LID,Junc_CatID)
Values ('[PulledLID]','[CatID]')
SET @cnt = @cnt + 1;
END;
-------------------------------------- UPDATE
以下是为我的令牌修改的查询。它确实有效,但在我的联结表中添加了一些额外的插入,我不知道它们来自哪里。
DECLARE @CatIDStr VARCHAR(100) = '[CatID]',@CatID VARCHAR(100) = ''
WHILE LEN(@CatIDStr) > 0
BEGIN
IF CHARINDEX(',',@CatIDStr) = 0
BEGIN
SET @CatID = @CatIDStr
SET @CatIDStr = ''
END
ELSE
BEGIN
SELECT @CatID = SUBSTRING(@CatIDStr,0,CHARINDEX(',',@CatIDStr))
SELECT @CatIDStr=SUBSTRING(@CatIDStr,CHARINDEX(',',@CatIDStr)+1,LEN(@CatIDStr))
END
INSERT INTO BND_ListingJunction_testing (Junc_LID,Junc_CatID)
Values ('[ScopedLID]',@CatID)
END
第1-7行都来自同一个只执行一次的插入。
答案 0 :(得分:3)
试试这个
DECLARE @CatIDStr VARCHAR(100) = '1,2,43,34',@CatID VARCHAR(100) = ''
DECLARE @PulledLID INT = 1
WHILE LEN(@CatIDStr) > 0
BEGIN
IF CHARINDEX(',',@CatIDStr) = 0
BEGIN
SET @CatID = @CatIDStr
SET @CatIDStr = ''
END
ELSE
BEGIN
SELECT @CatID = SUBSTRING(@CatIDStr,0,CHARINDEX(',',@CatIDStr))
SELECT @CatIDStr=SUBSTRING(@CatIDStr,CHARINDEX(',',@CatIDStr)+1,LEN(@CatIDStr))
END
INSERT INTO BND_ListingJunction_testing (Junc_LID,Junc_CatID)
Values (@PulledLID,@CatID)
END