声明变量&数据检索

时间:2015-03-24 05:55:08

标签: sql sql-server aggregate-functions sql-server-2012-express

最近,我问了一个关于通过与另一个表进行比较来更新列值的问题。以下工作完美,但由于记录的数量,需要一点时间。

 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

非常感谢您的协助。

1 个答案:

答案 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