/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
Stored Procedure
Fra : Dennis T. Holm


Dato : 23-04-03 10:33

Hej

Jeg sidder med et lille spørgsmål...

hvis jeg f.eks. havde en Stored Procedure på min MS-SQL server og ønskede at
den skulle returnere mere en bare en enkelt værdi.. F.Eks et helt resultat
sæt.. hvordan er det så lige man gør det ? ..

Altså hvordan får man en stored procedure til at returnere et resultatsæt..


mvh.. .DENNIS



 
 
Jens Gyldenkærne Cla~ (23-04-2003)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 23-04-03 11:21

Dennis T. Holm skrev:

> Altså hvordan får man en stored procedure til at returnere et
> resultatsæt..

Ganske simpelt - skriv en select-sætning der henter det ønskede
recordset til sidst:

CREATE PROC select_sp AS
BEGIN
   SELECT * FROM enheder ORDER BY linknavn DESC
END

Hvis du skal udføre beregninger eller andre T-SQL-kommandoer før du
kan hente postsættet kan du få brug for kommandoen
SET NOCOUNT ON|OFF. Det betyder ikke noget hvis man kører sp'en
direkte på sql-serveren, men hvis man skal vise recordsettet på en
webside kan nocount-tricket gøre det en del lettere (problemet er
at ADO tilsyneladende tror at der er flere recordset - det
"rigtige" recordset gemmer sig så til sidst).
--
Jens Gyldenkærne Clausen
MF (medlem af FIDUSO - www.fiduso.dk)
I ovenstående tekst benyttes nyt komma
(rettelser modtages gerne i dk.kultur.sprog)

Dennis T. Holm (23-04-2003)
Kommentar
Fra : Dennis T. Holm


Dato : 23-04-03 11:34

OK .. dvs hvis jeg f.eks. kalder min stored procedure fra en client, det
kunne være en Crystal Report så ville den returnere et resultatsæt ?

F.eks. hvis jeg nu kaldte denne her procedure som får overført en
parameter...

CREATE PROCEDURE getOrdreLinier
@OrdreNr
AS
BEGIN
SELECT * FROM OrdreLinier WHERE OrdreNo=@OrdreNr
END


Ville det virke ?

MVH Dennis


"Jens Gyldenkærne Clausen" <jens@gyros.invalid> skrev i en meddelelse
news:Xns93667DB72DE01jcdmfdk@gyrosmod.dtext.news.tele.dk...
> Dennis T. Holm skrev:
>
> > Altså hvordan får man en stored procedure til at returnere et
> > resultatsæt..
>
> Ganske simpelt - skriv en select-sætning der henter det ønskede
> recordset til sidst:
>
> CREATE PROC select_sp AS
> BEGIN
> SELECT * FROM enheder ORDER BY linknavn DESC
> END
>
> Hvis du skal udføre beregninger eller andre T-SQL-kommandoer før du
> kan hente postsættet kan du få brug for kommandoen
> SET NOCOUNT ON|OFF. Det betyder ikke noget hvis man kører sp'en
> direkte på sql-serveren, men hvis man skal vise recordsettet på en
> webside kan nocount-tricket gøre det en del lettere (problemet er
> at ADO tilsyneladende tror at der er flere recordset - det
> "rigtige" recordset gemmer sig så til sidst).
> --
> Jens Gyldenkærne Clausen
> MF (medlem af FIDUSO - www.fiduso.dk)
> I ovenstående tekst benyttes nyt komma
> (rettelser modtages gerne i dk.kultur.sprog)



Jens Gyldenkærne Cla~ (23-04-2003)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 23-04-03 11:50

Dennis T. Holm skrev:

> OK .. dvs hvis jeg f.eks. kalder min stored procedure fra en
> client, det kunne være en Crystal Report så ville den
> returnere et resultatsæt ?

Ja.


> CREATE PROCEDURE getOrdreLinier
> @OrdreNr
> AS
> BEGIN
> SELECT * FROM OrdreLinier WHERE OrdreNo=@OrdreNr
> END

Den vil virke fint (hvis du husker at sætte en type på din
variabel).

Som antydet før kan det give problemer hvis du har andre
forespørgsler før din SELECT-sætning.

Eksempel:

CREATE PROC getOrdreAntal
AS
BEGIN
   -- Opdater ordrestatus
   UPDATE Ordrer
   SET status = 'arkiv'
   WHERE ordredato < GETDATE()

   -- Tæl aktive ordrer
   SELECT COUNT(*) As antal
   FROM Ordrer
   WHERE status = 'aktiv'   
END

Ovenstående kan give problemer med eksterne klienter.

Det kan hjælpe at bruge følgende skabelon:

CREATE PROC mitProcNavn
AS
BEGIN
   -- Slå optælling af resultater fra
   SET NOCOUNT ON

   -- Udfør mellemregninger
   -- UPDATE's, variabel-selects mv. kommer ind her

   -- Slå optælling af resultater til igen
   SET NOCOUNT OFF

   -- Hent det færdige recordset
   SELECT ditten, datten, dutten FROM blabla

END    


I dit aktuelle tilfælde - hvor der ikke er nogen mellemregninger -
er skabelonen ikke nødvendig.
--
Jens Gyldenkærne Clausen
MF (medlem af FIDUSO - www.fiduso.dk)
I ovenstående tekst benyttes nyt komma
(rettelser modtages gerne i dk.kultur.sprog)

Dennis T. Holm (23-04-2003)
Kommentar
Fra : Dennis T. Holm


Dato : 23-04-03 12:01

Det er sandt nok at den udfører SELECT sætningen med den parameter som jeg
fører med over.. Men den returnerer ikke resultatsættet til min Crystal
Report.........
Skal der ikke indikeres på en eller anden måde HVAD DER ER som skal sendes
tilbage til den computer som kalder den stored procedure. ? ..

MVH Dennis


"Jens Gyldenkærne Clausen" <jens@gyros.invalid> skrev i en meddelelse
news:Xns936682903712jcdmfdk@gyrosmod.dtext.news.tele.dk...
> Dennis T. Holm skrev:
>
> > OK .. dvs hvis jeg f.eks. kalder min stored procedure fra en
> > client, det kunne være en Crystal Report så ville den
> > returnere et resultatsæt ?
>
> Ja.
>
>
> > CREATE PROCEDURE getOrdreLinier
> > @OrdreNr
> > AS
> > BEGIN
> > SELECT * FROM OrdreLinier WHERE OrdreNo=@OrdreNr
> > END
>
> Den vil virke fint (hvis du husker at sætte en type på din
> variabel).
>
> Som antydet før kan det give problemer hvis du har andre
> forespørgsler før din SELECT-sætning.
>
> Eksempel:
>
> CREATE PROC getOrdreAntal
> AS
> BEGIN
> -- Opdater ordrestatus
> UPDATE Ordrer
> SET status = 'arkiv'
> WHERE ordredato < GETDATE()
>
> -- Tæl aktive ordrer
> SELECT COUNT(*) As antal
> FROM Ordrer
> WHERE status = 'aktiv'
> END
>
> Ovenstående kan give problemer med eksterne klienter.
>
> Det kan hjælpe at bruge følgende skabelon:
>
> CREATE PROC mitProcNavn
> AS
> BEGIN
> -- Slå optælling af resultater fra
> SET NOCOUNT ON
>
> -- Udfør mellemregninger
> -- UPDATE's, variabel-selects mv. kommer ind her
>
> -- Slå optælling af resultater til igen
> SET NOCOUNT OFF
>
> -- Hent det færdige recordset
> SELECT ditten, datten, dutten FROM blabla
>
> END
>
>
> I dit aktuelle tilfælde - hvor der ikke er nogen mellemregninger -
> er skabelonen ikke nødvendig.
> --
> Jens Gyldenkærne Clausen
> MF (medlem af FIDUSO - www.fiduso.dk)
> I ovenstående tekst benyttes nyt komma
> (rettelser modtages gerne i dk.kultur.sprog)



Jens Gyldenkærne Cla~ (23-04-2003)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 23-04-03 12:17

Dennis T. Holm skrev:

> Det er sandt nok at den udfører SELECT sætningen med den
> parameter som jeg fører med over.. Men den returnerer ikke
> resultatsættet til min Crystal Report.........

Får du et tomt recordset eller bare intet recordset?


> Skal der ikke indikeres på en eller anden måde HVAD DER ER som
> skal sendes tilbage til den computer som kalder den stored
> procedure. ? ..

Nej, select-sætningen er indikation nok i sig selv.

Jeg kender intet til Crystal Report, men din SP ser rigtig nok
ud (har du testet at den virker i sqlserveren?)


NB: Læs og følg venligst retningslinjerne for citatteknik på
usenet - <http://usenet.dk/netikette/citatteknik.html>. I modsat
fald kan jeg ikke hjælpe mere.
--
Jens Gyldenkærne Clausen
MF (medlem af FIDUSO - www.fiduso.dk)
I ovenstående tekst benyttes nyt komma
(rettelser modtages gerne i dk.kultur.sprog)

Dennis T. Holm (23-04-2003)
Kommentar
Fra : Dennis T. Holm


Dato : 23-04-03 12:18

Jeg får et tomt recordset ... forstår jeg ikke helt .

For når jeg tester selve SQL sætning på SQL serveren hvor jeg så manuelt
indsætter min parameter i WHERE sætningen så får jeg et resultatset med
indhold... men ikke hvis jeg kører min procedure fra min klient.(Crystal
Report) ..

Dennis




"Jens Gyldenkærne Clausen" <jens@gyros.invalid> skrev i en meddelelse
news:Xns9366871ADCAD6jcdmfdk@gyrosmod.dtext.news.tele.dk...
> Dennis T. Holm skrev:
>
> > Det er sandt nok at den udfører SELECT sætningen med den
> > parameter som jeg fører med over.. Men den returnerer ikke
> > resultatsættet til min Crystal Report.........
>
> Får du et tomt recordset eller bare intet recordset?
>
>
> > Skal der ikke indikeres på en eller anden måde HVAD DER ER som
> > skal sendes tilbage til den computer som kalder den stored
> > procedure. ? ..
>
> Nej, select-sætningen er indikation nok i sig selv.
>
> Jeg kender intet til Crystal Report, men din SP ser rigtig nok
> ud (har du testet at den virker i sqlserveren?)
>
>
> NB: Læs og følg venligst retningslinjerne for citatteknik på
> usenet - <http://usenet.dk/netikette/citatteknik.html>. I modsat
> fald kan jeg ikke hjælpe mere.
> --
> Jens Gyldenkærne Clausen
> MF (medlem af FIDUSO - www.fiduso.dk)
> I ovenstående tekst benyttes nyt komma
> (rettelser modtages gerne i dk.kultur.sprog)



Jens Gyldenkærne Cla~ (23-04-2003)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 23-04-03 14:35

Dennis T. Holm skrev:

> Jeg får et tomt recordset ... forstår jeg ikke helt .

Hvis du vil have et fornuftigt svar bedes du læse nedenstående
igen.

>> NB: Læs og følg venligst retningslinjerne for citatteknik på
>> usenet - <http://usenet.dk/netikette/citatteknik.html>. I
>> modsat fald kan jeg ikke hjælpe mere.
--
Jens Gyldenkærne Clausen
MF (medlem af FIDUSO - www.fiduso.dk)
I ovenstående tekst benyttes nyt komma
(rettelser modtages gerne i dk.kultur.sprog)

Søg
Reklame
Statistik
Spørgsmål : 177516
Tips : 31968
Nyheder : 719565
Indlæg : 6408629
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste