2010-07-13 27 views
3

J'ai une instruction d'insertion:Comment vérifier si quelque chose a été inséré avec INSERT SELECT (T-SQL)

insert into parentTbl 
select firstId, secondId, thirdId, dateTm 
from importTbl 
where codeId = @codeIdParam 

Je dois trouver de manière fiable si cet insert quoi que ce soit inséré du tout. Idéalement, je voudrais définir une variable @insertedCount au nombre de lignes insérées, même si cela est 0.

J'utilise actuellement:

set @insertedCount = @@ROWCOUNT 

Mais cela semble seulement pour obtenir le dernier numéro de inséré lignes - le problème est que si l'instruction INSERT SELECT ne rien insérer le @@ROWCOUNT ne retourne pas 0.

+0

Votre instruction d'insertion réside-t-elle dans une boucle ou un curseur? – CoderHawk

Répondre

2

Vous pouvez essayer d'utiliser une clause OUTPUT, qui renverrait une ligne par ligne insérée; quelque chose comme:

insert into parentTbl 
output inserted.firstId 
select firstId, secondId, thirdId, dateTm 
from importTbl 
where codeId = @codeIdParam 

Cela vous donne un ResultSet avec les firstId s de chaque ligne insérée, que vous pouvez alors exécuter un compte sur.
Une façon serait de output into un tableau-var, puis faites un select count(*) from @tableVar à la fin pour obtenir votre nombre d'insertion.

+0

Finalement, j'ai pris l'instruction SELECT de l'instruction INSERT SELECT et l'ai définie pour renvoyer COUNT (*) à une variable - bien que, bien sûr, cela se produise avant l'INSERT SELECT, qui est maintenant encapsulé dans un bloc IF. –