Sql 如何使用两个单独的更新同时更新两个表?
以下是我的案例场景;我希望尽量减少我正在经历的步骤。具体地说,我正在用子表的值更新主表,但随后我正在更新子表,以了解以前的更新是哪些 无论如何,在我的例子中,我必须聚合两个表中通用的SalesId,然后对所有值进行排序 自动表格:Sql 如何使用两个单独的更新同时更新两个表?,sql,sql-server,tsql,sql-server-2008-r2,Sql,Sql Server,Tsql,Sql Server 2008 R2,以下是我的案例场景;我希望尽量减少我正在经历的步骤。具体地说,我正在用子表的值更新主表,但随后我正在更新子表,以了解以前的更新是哪些 无论如何,在我的例子中,我必须聚合两个表中通用的SalesId,然后对所有值进行排序 自动表格: SalesId Value Joe 10 Rick 5 Jean 8 Bob 19 Julian 12 SalesId Value WasUpdated Vick
SalesId Value
Joe 10
Rick 5
Jean 8
Bob 19
Julian 12
SalesId Value WasUpdated
Vick 18
Rick 20
Mary 15
July 11
手册表格:
SalesId Value
Joe 10
Rick 5
Jean 8
Bob 19
Julian 12
SalesId Value WasUpdated
Vick 18
Rick 20
Mary 15
July 11
我需要从两张桌子上订购所有的销售额。两个表中都有一个SalesId
(Rick):
Sales Total Auto Manual
Rick 25 5 20
Bob 19 19 0
Vick 18 0 18
Mary 15 0 15
Julian 12 12 0
July 11 0 11
Joe 10 10 0
Jean 8 8 0
为了得到这个结果,我将使用以下逻辑。如您所见,第3步和第4步有些重复;在我的例子中,我正在为Rick的案例更新@downthedule,但随后我正在更新ManualTable,这样我就知道我已经处理了Rick,不需要插入(步骤5)
有些脚本可能无法正常运行。问题的目的是消除步骤
-- Create @DowntimeTable table
declare @DowntimeTable table ( Sales varchar(20), Auto int, Manual int, Total int )
-- Add AutoTable to @DowntimeTable
INSERT INTO @DowntimeTable (Sales, Auto) Select sales, auto from AutoTable
-- Update @DowntimeTable.Manual with matching ManualTable.Sales (ie Rick)
Update @DowntimeTable set Manual = ManualTable.Value
from ManualTable inner join @DowntimeTable td on
ManualTable.Sales = @DowntimeTable.sales
-- Set ManualTable.WasUpdate true for rows updated in previous UPDATE (ie Rick)
Update ManualTable
set WasUpdated = 1 from ManualTable inner join @DowntimeTable on
ManualTable.Sales = @DowntimeTable.sales
-- Insert rest of ManualTable
INSERT INTO @DowntimeTable (Sales, Manual)
Select sales, Manual from ManualTable where WasUpdated = 0
UPDATE @DowntimeTable set Total = Manual + Auto
所以,我的问题是:是否可以将步骤3和4分组到一个sql脚本中?更新@downthedule后是否可以自动更新自动表
谢谢。这不是一个很明确的提问方式。。。只需发布代码并添加注释,而不是代码注释 我知道我没有更新任何东西,但一开始看起来你只是想做一些更新来输出这样的东西
select
ISNULL(AT.SalesId,MT.SalesId) [Sales],
ISNULL(AT.Value,0)+ISNULL(MT.Value,0) [Total],
ISNULL(AT.Value,0) [Auto],
ISNULL(MT.Value,0) [Manual]
from AutoTable AT
full outer join ManualTable MT ON
AT.SalesId = MT.SalesId
注意:向表中添加列会改变它。。您正在更改表的构造。所以,不,你不能同时做3和4。如果可能的话,我建议你先做4,然后再做3。你的问题非常模糊,但我感觉你在使用循环来进行更新?我已经更新了问题。我不使用循环。如果我运行它,它将与发布的完全一样,显然修复了任何不正确的sql语法(即表变量别名)。