我有两个表,在两个不同的数据库中。我使用其中一个表来更新另一个数据库表中的值。
有超过200,000行需要迭代,并且在Amazon c3上运行需要几个小时。超大实例。
下面是我正在运行的查询,我想知道三件事:
- 可以优化这个查询以执行得更快吗?
- 我想添加一个计数来获得实际记录的数量updated.How吗?
- 我怎么能把它变成一个SQL作业?
DECLARE @id VARCHAR(12) -- unique id DECLARE @currentval VARCHAR(64) -- current value DECLARE @newval VARCHAR(64) -- updated value DECLARE db_cursor1 CURSOR FOR SELECT b.[id], a.status, b.[New Status] FROM db1.dbo.['account'] as b inner join db2.dbo.accounttemp as a on a.ACCOUNTID = b.[ID] OPEN db_cursor1 FETCH NEXT FROM db_cursor1 INTO @id, @currentval, @newval WHILE @@FETCH_STATUS = 0 BEGIN UPDATE db2.dbo.accounttemp SET status = @newval WHERE ACCOUNTID = @id AND STATUS = @currentval FETCH NEXT FROM db_cursor1 INTO @id, @currentval, @newval END CLOSE db_cursor1 DEALLOCATE db_cursor1
-
通过查看该过程,您将看到可以使用以下SQL
完全删除游标更新db2.dbo.accounttempSET status = a.状态从db2.dbo。accounttemp在内部连接db2 .dbo。['account'] AS a ON a. id = at.[ACCOUNTID]a.Status = at。地位
-
调用以下行返回受更新
影响的行RETURN @@ROWCOUNT
-
您可以创建一个SQL维护计划来定期运行它