Sql server 将筛选表的结果插入到原始表中

Sql server 将筛选表的结果插入到原始表中,sql-server,tsql,Sql Server,Tsql,我有一个原始表#TEMP_table,其中包含一个整数索引字段ID,我需要将其连接到相关字段ID_R上的另一个表filter,然后根据某些条件进行过滤。这些条件在WHILE循环中提供。在循环结束时,我需要将过滤后的结果返回到原始的#TEMP_表中 所以现在我在做类似的事情 WHILE [loop condition] BEGIN SELECT #TEMP_TABLE.ID INTO #TMP_FILTERED_TABLE FROM #TEMP_TABLE INNER JOIN FIL

我有一个原始表
#TEMP_table
,其中包含一个整数索引字段
ID
,我需要将其连接到相关字段
ID_R
上的另一个表
filter
,然后根据某些条件进行过滤。这些条件在
WHILE
循环中提供。在循环结束时,我需要将过滤后的结果返回到原始的#TEMP_表中

所以现在我在做类似的事情

WHILE [loop condition]
BEGIN
   SELECT #TEMP_TABLE.ID INTO #TMP_FILTERED_TABLE
   FROM #TEMP_TABLE INNER JOIN FILTER ON #TEMP_TABLE.ID = FILTER.ID_R
   WHERE FILTER.FIELD1 = [parameter1 from loop] AND FILTER.FIELD2 = [parameter2 from loop]

   TRUNCATE TABLE #TEMP_TABLE

   INSERT INTO #TEMP_TABLE (ID)
   SELECT ID FROM #TMP_FILTERED_TABLE

   DROP TABLE #TMP_FILTERED_TABLE
END -- END LOOP
FILTER表非常庞大,因此JOIN there执行双重任务—它通过ID将筛选器限制为较小的子集,然后当筛选器通过其自身的WHERE子句进行筛选时,将限制输出结果。随着循环的进行,结果会变小,因为#TEMP#u表会变小

该要求是在循环在原始#TEMP#u表中具有最终结果之后


有没有更好、更优化、更优化的方法来实现这一点?

不使用过滤表,您能不能不使用

 delete t 
 from #temp_table t
      INNER JOIN FILTER ON t.ID = FILTER.ID_R
      WHERE NOT (FILTER.FIELD1 = [parameter1 from loop] 
                 AND FILTER.FIELD2 = [parameter2 from loop])

哦。。。请下行选民评论下行投票的原因好吗?是“你尝试了什么?”还是“不是编程问题”或“因为主题无关”。请详细说明,谢谢!我正在考虑删除,但无法确定正确的查询,而这一个看起来可以做到,我将尝试一下。还有一种便宜的方法可以在删除后检查#TEMP#u表是否没有更多记录?使用原始插入时,我可以只检查@@ROWCOUNT-并退出循环。@YuriyGalanter如果计数(*)太贵,您可以尝试将
select exists
select top 1
插入变量并检查它是否为null(在选择之前将其重置为null)