2010-08-26 6 views

Antwort

13

weil dieses if @i=0

setzt es auf 0, auch eine print-Anweisung auf 0

gesetzt wird nun laufen diese

declare @i int, @RowNum int 
set @i=0 
while @i<2 
begin 
    if @i=0 
    begin 
     execute StoredProcedure @i --containing a big select 
     set @[email protected]@rowcount 
    end 
    else 
    execute StoredProcedure @i 
    set @[email protected]+1 
end 
print @RowNum 

hier ist ein weiteres Beispiel

select 1 
union all 
select 2 

select @@rowcount --2 
go 

jetzt wird es 0

select 1 
union all 
select 2 
if 1=1 
select @@rowcount --0 

sein PRINT vermasselt es auch, wird diese 2 wird

select 1 
union all 
select 2 

select @@rowcount --2 
go 

dieses 0

select 1 
union all 
select 2 

print '1' 
select @@rowcount -- 0 

sein, die ich mit mehr Beispielen einen Beitrag erstellt und Erklärungen hier: When should you store @@ROWCOUNT into a variable?

+0

alles nach dem Ergebnis verursacht es zurückgesetzt werden, fügte ich auch ein Beispiel mit Drucken, @@ Fehler hat das gleiche Verhalten – SQLMenace

+0

Ist es erforderlich Verhalten, dass · wenn @ i = 0 · beeinflusst @@ rowcount Wert? Sie sehen, ich brauche die Zeilennummer der ersten Ergebnismenge. Wie kann ich das erreichen? – phoenies

+0

sehen Sie modifizierten Code, wenn Ihr anderes mehr als 1 Aussage benötigt, dann fügen Sie BEGIN END um es hinzu – SQLMenace

0

Ich gehe davon aus, dass SQLMenace die richtige Antwort ist, b ut hinzufügen, "Würde dies nicht tun, was Sie wollen?":

+0

Der Beispielcode ist ungenau. Was nach 'execute' ist, ist tatsächlich eine dynamisch erzeugte Zeichenkette, was sehr kompliziert ist. Ich bevorzuge es nicht, den generierenden Teil des Codes zu wiederholen. – phoenies

0

Ich würde diesen Stil im Allgemeinen vermeiden. Wenn Sie die Anzahl der aus einer Tabelle im SP ausgewählten Zeilen abrufen, indem Sie nach dem Aufruf der Prozedur @@ rowcount abfragen, führen Sie tatsächlich eine unnötige Abhängigkeit davon ein, wie die Prozedur implementiert wird und die Explizitheit beeinträchtigt. Wenn Sie später die Implementierung der Prozedur ändern, kann es den Code außerhalb brechen, und es wäre nicht offensichtlich, wenn Sie den SP ändern. Sie sollten stattdessen Ausgabeparameter verwenden, die entsprechend benannt sind.

+0

Sie haben Recht. Der Beispielcode ist ungenau. Es ist eher ein String als ein SP. – phoenies

Verwandte Themen