Quelle est la portée de @@rowcount
? MSDN ne mentionne pas sa portée.
Renvoie le nombre de lignes affectées par la dernière instruction.
D'accord.
Dans mon SP - j'insère dans une table, qui a un insert trigger
qui fait un autre insertion lorsqu'une nouvelle valeur est insérée dans la table.
Question:
Dans quelle mesure le @@rowcount
fera référence? (déclencheur ou SP)?
Certes, l'article concerne SQL Server 2000, mais on espère que la portée ne change pas entre les versions. Selon l'article Comment les déclencheurs affectent ROWCOUNT et IDENTITY dans SQL Server 20 , @@ROWCOUNT
ne sera pas affecté par les déclencheurs.
Plus précisément:
Il est sûr d'utiliser @@ ROWCOUNT dans SQL Server 2000 même lorsqu'il y a un déclencheur sur la table de base. Le déclencheur ne faussera pas vos résultats; vous obtiendrez ce que vous attendez. @@ ROWCOUNT fonctionne correctement même lorsque NOCOUNT est défini.
Donc, si vous mettez à jour trois lignes et que le déclencheur met à jour cinq lignes ailleurs, vous obtiendrez un @@ROWCOUNT
sur 3.
En outre, à partir de la réponse de GBN dans SQL Server - utilise @@ ROWCOUNT en toute sécurité dans les applications multithread? :
@@ ROWCOUNT est à la fois sûr pour la portée et la connexion.
En fait, il lit uniquement le dernier nombre de lignes d'instruction pour cette connexion et cette étendue.
chaque instruction insert/update/select/set/delete réinitialise le @@rowcount
aux lignes affectées par l'instruction exécutée
begin
declare @myrowcount int,
@myrowcount2 int
insert stmt
SET @myrowcount=@@rowcount
if @myrowcount>0
begin
insert stmt
SET @myrowcount2 =@@rowcount
if @myrowcount2 >0
do smthg
end
end
ou essayez ceci
SELECT * FROM master.sys.objects -- 50 rows
IF (1=1)
SELECT @@ROWCOUNT AS RowsAffected -- 0, because the IF did not affect any rows
même une instruction IF l'affecte ... d'où sa portée est la dernière instruction lue.