[SQL] Stored procedure geeft geen gewenst resultaat

Pagina: 1
Acties:

  • Swerfer
  • Registratie: Mei 2003
  • Laatst online: 21-05 23:07
Onderstaande stored procedure geeft niet het gewenste resultaat als de eerste select geen rows bevat. Het is dan net of de tweede select wordt genegeerd.

Kan je soms geen 2 selects achter elkaar geven, of moet je de eerste select 'clearen' of zo?

SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
(
    @PN nchar(6),
    @MOSNR nchar(4),
    @AFBNR nvarchar(4)
)
AS
    SELECT TOP 1 TARGETPN,TARGETMOSNR,TARGETAFBNR,ALTERNATETEXT 
        FROM RECTANGLE 
        WHERE TARGETPN=@PN 
        AND TARGETMOSNR=@MOSNR 
        AND TARGETAFBNR>@AFBNR 
        ORDER BY AFBNR
    IF @@ROWCOUNT = 0
        SELECT TOP 1 TARGETPN,TARGETMOSNR,TARGETAFBNR,ALTERNATETEXT 
            FROM RECTANGLE 
            WHERE TARGETPN=@PN 
            AND TARGETMOSNR>@MOSNR 
            ORDER BY MOSNR,AFBNR

Home Assistant | Unifi | LG 51MR.U44 | Volvo EX30 SMER+ Vapour Grey, trekhaak | SmartEVSE V3 | Cronos Crypto.com


  • klinz
  • Registratie: Maart 2002
  • Laatst online: 21-05 09:01

klinz

weet van NIETS

Als de eerste query geen resultaat teruggeeft, krijg je daar toch een recordset van terug (weliswaar met 0 records). Je krijgt dus in totaal twee recordsets terug en blijkbaar lees je enkel de eerste uit.

Je zou dit op kunnen lossen door eerst te bepalen of de eerste query uberhaupt records gaat opleveren (tip: count()).

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Je moet direct na het AS statement

code:
1
SET NOCOUNT ON
gebruiken, dit voorkomt dat tussentijdse resultaten (als in dit geval '0 row(s) affected') je uiteindelijke select vernaggelen.

En als je wel verschillende selects in een stored procedure wilt gebruiken kan dit wel, maar dan moet je in de clientcode er rekening mee houden. In classic asp bijvoorbeeld RecordSet.NextRecordSet uitvoeren om bij de 2e select te komen.

Oops! Google Chrome could not find www.rijks%20museum.nl


  • Swerfer
  • Registratie: Mei 2003
  • Laatst online: 21-05 23:07
klinz schreef op 10 oktober 2004 @ 04:06:
Als de eerste query geen resultaat teruggeeft, krijg je daar toch een recordset van terug (weliswaar met 0 records). Je krijgt dus in totaal twee recordsets terug en blijkbaar lees je enkel de eerste uit.

Je zou dit op kunnen lossen door eerst te bepalen of de eerste query uberhaupt records gaat opleveren (tip: count()).
Bedankt voor de tip. Met count() heb ik mijn procedure werkend gekregen...

Home Assistant | Unifi | LG 51MR.U44 | Volvo EX30 SMER+ Vapour Grey, trekhaak | SmartEVSE V3 | Cronos Crypto.com