我有一个查询从#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
循环并替换为更多基于集合的操作?
答案 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 + '%'