Numa mensagem para debug, print e select retornam ROWCOUNT diferentes

Há uns dias coloquei aqui uma entrada onde pedia cuidado no código onde colocamos um ROWCOUNT.

Surgiu uma questão que deixo aqui respondida. Parece básica… e é, mas o que é básico para alguns não é necessariamente para outros.

Se não se lembram, colocar um print ou um select “para debug” pode (e altera) o nosso ROWCOUNT, bem como um begin/commit transaction.

A única diferença entre apagarmos linhas a menos ou criarmos um ciclo infinito está com o retorno do que, sem querer, acabamos por fazer ao nosso código.

Um print e um begin/commit transaction não devolve nenhum dataset, logo ROWCOUNT é 0.

Se fizermos

print 'aha!'

Apenas temos a tab “Messages”, não temos “Results”.

O mesmo acontece com um begin/commit transaction.

begin transaction
commit transaction

Se têm dúvidas e podem dizer que quee foi por ser um begin/commit sem nada lá dentro, podemos retirar já a dúvida.

create table #t1 (id int)

begin transaction
	insert into #t1 values (1)
commit transaction

Agora se devolvermos um dataset…

select 'aha!'

Em resumo…

print 'aha!'
select @@rowcount as RC

select 'aha!'
select @@ROWCOUNT as RC

begin transaction
commit transaction
select @@ROWCOUNT as RC
Share

You may also like...

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *