2013-07-17 193 views
0

我有这段代码,我知道这不是完成这项工作的最有效的方法,但我能说什么!我是SQL新手,我一切都是按行来做的。基本上我正在更新表中的特定字段。我需要找到总体更新,因为您看到列表太长,我有更多的信息,所以我知道需要知道我有多少次更新。有谁知道我是否可以在SQL中做到这一点,除了将代码复制并粘贴到word文档中并计算单词更新的编号。临时表可以做那样的事吗?SQL Server计算总更新

UPDATE tblMEP_MonthlyData 
    SET Consumption = 51634 

FROM tblMEP_Sites 

JOIN tblMEP_Meters 
ON tblMEP_Meters.SiteID = tblMEP_Sites.ID 

JOIN tblMEP_Monthlydata 
ON tblMEP_MonthlyData.MeterID = tblMEP_Meters.ID 

WHERE ProjectID = 40 
AND Consumption != 51634 
AND tblMEP_Sites.Name LIKE '%Altgeld%' 
AND Type = 1 
AND BillingMonth = '2012-11-01 00:00:00.000' 

----------------------------------------------------------------------------- 

UPDATE tblMEP_MonthlyData 
    SET Consumption = 38370 

FROM tblMEP_Sites 

JOIN tblMEP_Meters 
ON tblMEP_Meters.SiteID = tblMEP_Sites.ID 

JOIN tblMEP_Monthlydata 
ON tblMEP_MonthlyData.MeterID = tblMEP_Meters.ID 

WHERE ProjectID = 40 
AND tblMEP_Sites.Name LIKE '%Altgeld%' 
AND Consumption != 38370 
AND Type = 1 
AND BillingMonth = '2012-10-01 00:00:00.000' 

----------------------------------------------------------------------------- 

UPDATE tblMEP_MonthlyData 
    SET Consumption = 108610 


FROM tblMEP_Sites 

JOIN tblMEP_Meters 
ON tblMEP_Meters.SiteID = tblMEP_Sites.ID 

JOIN tblMEP_Monthlydata 
ON tblMEP_MonthlyData.MeterID = tblMEP_Meters.ID 

WHERE ProjectID = 40 
AND tblMEP_Sites.Name LIKE '%Avond%' 
AND Consumption != 108610 

AND Type = 1 
AND BillingMonth = '2012-8-01 00:00:00.000' 

----------------------------------------------------------------------------- 

UPDATE tblMEP_MonthlyData 
    SET Consumption = 107923 

FROM tblMEP_Sites 

JOIN tblMEP_Meters 
ON tblMEP_Meters.SiteID = tblMEP_Sites.ID 

JOIN tblMEP_Monthlydata 
ON tblMEP_MonthlyData.MeterID = tblMEP_Meters.ID 

WHERE ProjectID = 40 
AND tblMEP_Sites.Name LIKE '%Avond%' 
AND Consumption != 107923 

AND Type = 1 
AND BillingMonth = '2012-9-01 00:00:00.000' 


--------------------------------------------------------------------------------- 
UPDATE tblMEP_MonthlyData 
    SET Consumption = 1442 

FROM tblMEP_Sites 

JOIN tblMEP_Meters 
ON tblMEP_Meters.SiteID = tblMEP_Sites.ID 

JOIN tblMEP_Monthlydata 
ON tblMEP_MonthlyData.MeterID = tblMEP_Meters.ID 

WHERE ProjectID = 40 
AND tblMEP_Sites.Name LIKE '%Belmont-cragin Pre-k%' 
AND Consumption != 1442 

AND Type = 1 
AND BillingMonth = '2012-7-01 00:00:00.000' 

----------------------------------------------------------------------------- 


UPDATE tblMEP_MonthlyData 
    SET Consumption = 1477 


FROM tblMEP_Sites 

JOIN tblMEP_Meters 
ON tblMEP_Meters.SiteID = tblMEP_Sites.ID 

JOIN tblMEP_Monthlydata 
ON tblMEP_MonthlyData.MeterID = tblMEP_Meters.ID 

WHERE ProjectID = 40 
AND tblMEP_Sites.Name LIKE '%Belmont%' 
AND Consumption != 1477 


AND Type = 1 
AND BillingMonth = '2012-8-01 00:00:00.000' 

----------------------------------------------------------------------------- 


UPDATE tblMEP_MonthlyData 
    SET Consumption = 1636 

FROM tblMEP_Sites 

JOIN tblMEP_Meters 
ON tblMEP_Meters.SiteID = tblMEP_Sites.ID 

JOIN tblMEP_Monthlydata 
ON tblMEP_MonthlyData.MeterID = tblMEP_Meters.ID 

WHERE ProjectID = 40 
AND tblMEP_Sites.Name LIKE '%Belmont%' 
AND Consumption != 1636 

AND Type = 1 
AND BillingMonth = '2012-9-01 00:00:00.000' 

----------------------------------------------------------------------------- 


UPDATE tblMEP_MonthlyData 
    SET Consumption = 1451 


FROM tblMEP_Sites 

JOIN tblMEP_Meters 
ON tblMEP_Meters.SiteID = tblMEP_Sites.ID 

JOIN tblMEP_Monthlydata 
ON tblMEP_MonthlyData.MeterID = tblMEP_Meters.ID 

WHERE ProjectID = 40 
AND tblMEP_Sites.Name LIKE '%Belmont%' 
AND Consumption != 1451 

AND Type = 1 
AND BillingMonth = '2012-10-01 00:00:00.000' 

----------------------------------------------------------------------------- 


UPDATE tblMEP_MonthlyData 
    SET Consumption = 1615 

FROM tblMEP_Sites 

JOIN tblMEP_Meters 
ON tblMEP_Meters.SiteID = tblMEP_Sites.ID 

JOIN tblMEP_Monthlydata 
ON tblMEP_MonthlyData.MeterID = tblMEP_Meters.ID 

WHERE ProjectID = 40 
AND tblMEP_Sites.Name LIKE '%Belmont%' 
AND Consumption != 1615 

AND Type = 1 
AND BillingMonth = '2012-11-01 00:00:00.000' 
+0

通过总更新,你的意思是更新语句的总数(通过计算你的查询包含“update”的次数得到的结果),或者当查询结束时更新的总行数(每个更新语句可能编辑很多行)? –

+0

谢谢你提出这个问题!我的意思是,当查询现在完成 –

+0

时更新的行总数,我正在考虑它,如果可能的话,我真的很希望看到两者。 –

回答

1

您可以使用@@ROWCOUNT变量来收集每个语句影响的行数。如果您想保存这在任何地方,你可以在每个代码块后面添加以下行:

set @[email protected]@ROWCOUNT 
insert into MyTableWithTOtals (RowsAffected) values (@RowsAffected) 

当然,你应该在声明的开头@RowsAffected变量。 使用这种方式,您将能够统计行数和更新语句的数量。

3

你想要的是@@ROWCOUNT

之后每个update这设置为已更新的行数。 (见here

在把这个放入你的代码方面,你可能会做这样的事情:

declare @TotalRowsint = 0; 

update . . . 

set @TotalRows= @TotalRows+ @@ROWCOUNT; 

update . . . 

set @TotalRows= @TotalRows+ @@ROWCOUNT; 

然后你可以选择总。如果您需要每次更新的计数,则可以使用print @@ROWCOUNT代替。或者,将值插入表中。

使用@@ ROWCOUNT时,要小心,因为大多数SQL语句都会影响它。所以,一个安全的事情做的是立即分配给另一个变量,然后使用该变量:

declare @TotalRows int = 0, @NumRows int; 

update . . . 

set @NumRows = @@ROWCOUNT; 
set @TotalRows= @TotalRows + @NumRows; 
print @NumRows; 
insert into AllMyUpdates(which, numrows) 
    select 'This update', @NumRows; 

update . . . 
0

请使用

select @@Rowcount 

在更新语句的结束。