删除字符串搜索查询中的 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 + '%'
我有一个查询,它从 #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 + '%'