2013-07-17 279 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 

在更新語句的結束。