最近,我问了一个关于通过与另一个表进行比较来更新列值的问题。以下工作完美,但由于记录的数量,需要一点时间。
UPDATE Table1
SET [Count] =
(
SELECT COUNT(*) FROM Table2
WHERE Table1.ID = Table2.ID
AND Table2.Val <= Table1.Val
)
我目前将上面的内容作为存储过程的一部分运行,并希望以某种方式将其折叠到构建临时表的主Select查询中。
Select a.col1, b.col2, b.col3 into staging_table (select ...,)
在上述选择查询之后,运行更新查询。虽然它有效但需要时间。我正在研究声明变量,其值将在上面的选择子查询中设置,然后在子查询中使用,但我已经查看了一些参考资料,我在解决它时遇到了一些麻烦:
http://www.sql-server-helper.com/error-messages/msg-141.aspx
非常感谢您的协助。
答案 0 :(得分:1)
您可以使用CTE
,我认为当aggregated functions
subqueries
进行更新时,它会很有用:
with cte as
(
select Table1 .id, count(*) cnt
FROM Table1
JOIN Table2 on Table1.ID = Table2.ID
AND Table2.Val <= Table1.Val
group by Table1.id
)
UPDATE Table1
SET [Count] = cnt
FROM Table1
JOIN cte on Table1.ID = cte.ID