2013-07-17 4 views
0

У меня этот код, я знаю, что это не самый эффективный способ выполнить эту работу, но что я могу сказать! Я новичок в SQL, и я делаю все подряд. В основном я обновляю определенные поля в таблице. Мне нужно найти общее обновление, так как вы видите, что список слишком длинный, и у меня есть к нему больше, поэтому я знаю, что нужно знать, сколько всего обновленных обновлений у меня есть. Кто-нибудь знает, могу ли я сделать это в SQL, кроме как просто копировать и вставлять код в текстовый документ, и подсчитывать номер слова Обновление. Может ли таблица temp делать что-то подобное?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

К общим обновлениям, вы имеете в виду общее количество операторов обновления (что вы получаете, подсчитывая количество запросов, содержащихся в вашем запросе, «обновление») или общее количество строк, обновляемых при завершении запроса (каждый оператор обновления может редактировать много строк)? –

+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 

в конце заявления обновления.

Смежные вопросы