0

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

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循环并替换为更多基于集合的操作?

4

2 回答 2

0
INSERT INTO #link_table
    SELECT rcs.itemId,
           rcs.Path,
           it.Path
        FROM ReportCsharp rcs
            INNER JOIN #itemtemp it
                ON rcs.Script LIKE '%' + it.Path + '%';
于 2015-04-09T20:06:33.670 回答
0

如代码中所示,您可以直接使用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 + '%'
于 2015-04-09T20:06:53.570 回答