2010-09-17 12 views
5

Tengo un sp SQL Server mediante un cursor de este modo:filas de conteo antes de la transformación con un tsql cursor

DECLARE TestCursor CURSOR FOR 
    SELECT 
     tblHSOutcomes.strOutcomeName, 
     tblHSData.fkHSTest 
    FROM 
     tblHSData 
     INNER JOIN tblHSOutcomes ON tblHSData.fkOutcome = tblHSOutcomes.uidOutcome 
     INNER JOIN tblHSTests ON tblHSData.fkHSTest = tblHSTests.uidTest 
    WHERE 
     tblHSData.fkEpisode = @uidHSEpisodes 

OPEN TestCursor 
    FETCH NEXT FROM TestCursor 
    INTO @Result, @TestID 

WHILE @@FETCH_STATUS = 0 
BEGIN 
...etc 

que está funcionando muy bien, sin embargo, sería bueno poder comprobar si la consulta cursores tiene ningún registro antes de seguir procesando a través de él. si hay un @@ var que pueda usar para verificar esto? Sé que es @@ RowCount - pero esto no tiene sólo el número actual de filas procesadas - por lo que no es muy útil

Idealmente me gustaría ser capaz de hacer algo como esto:

if @@cursorQueryHasRecords 
BEGIN 
WHILE @@FETCH_STATUS = 0 
BEGIN 
...etc 

gracias

nat

+6

Y por qué no se puede utilizar @@ FETCH_STATUS sí? – Arvo

+0

Y realmente necesitas un cursor, a menudo son la peor opción. http://wiki.lessthandot.com/index.php/Cursors_and_How_to_Avoid_Them – HLGEM

Respuesta

4
if exists(
    SELECT 
     tblHSOutcomes.strOutcomeName, 
     tblHSData.fkHSTest 
    FROM 
     tblHSData 
     INNER JOIN tblHSOutcomes ON tblHSData.fkOutcome = tblHSOutcomes.uidOutcome 
     INNER JOIN tblHSTests ON tblHSData.fkHSTest = tblHSTests.uidTest 
    WHERE 
     tblHSData.fkEpisode = @uidHSEpisodes 
) 
... 
+0

hola gracias por la respuesta. cómo envolverlo en el bit de cursor ... no quiero ejecutar esa consulta dos veces ... Presumiblemente no puedo hacer decalre testcursor cursor para si existe (seleccione .... – nat

Cuestiones relacionadas