删除字符串搜索查询中的 While 循环

Removing While Loop in String Search Query

我有一个查询,它从 #itemtemp 中获取一条记录,然后找到 ReportCSharp 中匹配的所有条目,然后将这些匹配项插入到 #link_table 中。目前,查询运行时间为 7.5 分钟,这对于迭代 #itemtemp table 中的 1458 条记录来说显得很慢。

DECLARE 
    @num    int
,   @path   varchar(100)
,   @output varchar(100)
,   @max    int

SET @num = 1

SET @max = (SELECT max(num) FROM #itemtemp)

WHILE @num < @max
BEGIN

    SET @path = (SELECT path from #itemtemp where num = @num)

    INSERT INTO #link_table
    SELECT 
        itemId
    ,   Path
    ,   @path
    FROM ReportCsharp
    WHERE Script like '%"' + @path + '"%' 

    SET @num += 1
END

如何删除 WHILE 循环并替换为更多基于集合的操作?

INSERT INTO #link_table
    SELECT rcs.itemId,
           rcs.Path,
           it.Path
        FROM ReportCsharp rcs
            INNER JOIN #itemtemp it
                ON rcs.Script LIKE '%' + it.Path + '%';

如代码中所示,您可以直接使用 insert...select...join:

INSERT INTO #link_table
SELECT 
    P.itemId
,   P.Path
,   I.path
FROM ReportCsharp P
JOIN #itemtemp I ON P.Script like '%' + I.path + '%'