2013-08-18 5 views
0

У меня проблема с одной из моих транзакций. Я поставил его на печать, сколько строк были затронуты использованием @rowcount:проблема @rowcount с транзакцией

create proc Proc_Whole_Months_Work 
@ProjectNum int, 
@EmpId int, 
@StartDate datetime, 
@EndDate datetime 
as 
BEGIN TRANSACTION 
    declare @CurrentDate datetime 
    DECLARE @rowcount int 
    set @CurrentDate = @StartDate 

    while (@CurrentDate <= @EndDate) 
    begin 
     if (datepart(WEEKDAY, @CurrentDate) <=5)--if it is a weekday 
     begin 
      insert into WorkHours(ProjectNum,EmpId,WorkDate,BeginTime,EndTime)values (@ProjectNum,@EmpId,@CurrentDate,'09:00:00','17:00:00')  
     end 
     set @CurrentDate =DATEADD(dd, 1, @CurrentDate) 
    end 
SET @rowcount = @@ROWCOUNT 
--print @rowcount 
if(@rowcount = 0) 
    PRINT 'No rows Updated' 
else 
    print 'Number Of Rows Updated:' + ' ' + str(@rowcount) 
COMMIT TRANSACTION 

пойти

По какой-то причине, что я, кажется, не понимают, процедура печатает «Нет строк обновлялась», даже если есть строки обновлены! Любая идея, что я делаю неправильно? Большое спасибо!

ответ

0

@@rowcount возвращает количество строк, затронутых в последнем заявлении, так что вы должны сохранить его перед выполнением каких-либо заявлений или будут потеряны

set @rowcount = 0 
while @CurrentDate <= @EndDate 
begin 
    if datepart(weekday, @CurrentDate) <=5 --if it is a weekday 
    begin 
     insert into WorkHours(ProjectNum,EmpId,WorkDate,BeginTime,EndTime)values (@ProjectNum,@EmpId,@CurrentDate,'09:00:00','17:00:00')  
     set @rowcount = @rowcount + @@rowcount 
    end 
    set @CurrentDate = dateadd(day, 1, @CurrentDate) 
end 

print @rowcount 

Я также удалены некоторые лишние скобки в коде

+0

Большое спасибо за ваш ответ! Но по-прежнему кажется, что обновление строк не было ..: \ (затронуты 1 строка) (затронуты 1 строка (ы)) Нет строк Обновлено – user2693861

+0

1. попробуйте напечатать @rowcount внутри вашей процедуры. 2. Вы уверены, что там вставлены некоторые строки? –