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

时间:2015-04-09 19:58:30

标签: sql sql-server while-loop set-based

我有一个查询从#itemtemp获取一条记录,并找到匹配的所有条目,将这些匹配插入ReportCSharp。目前,查询运行时间为7.5分钟,对#link_table表中仅有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 循环并替换为更多基于集合的操作?

2 个答案:

答案 0 :(得分: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 + '%';

答案 1 :(得分: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 + '%'