/ 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
SP kalder SP
Fra : Casper Bang


Dato : 02-01-05 14:14

Hej,

Jeg har en Stored Procedure i MS SQL Server 2000 som skal kalde en anden
stored procedure (SP).
Men hvordan får jeg fat i resultatet fra den ene SP?

SP1 har til sidst:
SELECT var1 = @var1, var2 = @var2

I SP2 skal jeg kalde SP1 med en parameter, og bruge "var1", som SP1
returnerer som et resultset.
Hvordan gør jeg dette?

Jeg håber i kan hjælpe.

MVH
Casper Bang



 
 
Ryan Dahl (03-01-2005)
Kommentar
Fra : Ryan Dahl


Dato : 03-01-05 05:08

On Sun, 2 Jan 2005 14:14:27 +0100, "Casper Bang"
<webmaster_fjerndette@fjerndette_secretsofwar.net> wrote:

>Hej,
>
>Jeg har en Stored Procedure i MS SQL Server 2000 som skal kalde en anden
>stored procedure (SP).
>Men hvordan får jeg fat i resultatet fra den ene SP?
>
>SP1 har til sidst:
>SELECT var1 = @var1, var2 = @var2
>
>I SP2 skal jeg kalde SP1 med en parameter, og bruge "var1", som SP1
>returnerer som et resultset.
>Hvordan gør jeg dette?


Hej,

hvis du blot skal have individuelle værdier kan du f.eks. gøre
således:

CREATE PROCEDURE SP2
AS
DECLARE @Antal integer
exec SP1 @Antal OUT
/* Nu skulle @Antal indeholde værdi fra SP1 */
END

CREATE PROCEDURE SP1
@Antal integer OUTPUT
AS
SELECT @Antal = COUNT(*) FROM TABEL1
END

- Det er lige lavet nødtørftigt, så bær over med mig, hvis der har
sneget sig en fejl ind.

mvh
Ryan


Casper Bang (03-01-2005)
Kommentar
Fra : Casper Bang


Dato : 03-01-05 11:04

> hvis du blot skal have individuelle værdier

Det skal jeg - blandt andet. Der er også ASP-sider som hiver fat i den
stored procedure, og bruger det resultset den returnerer.
Jeg forstår godt dit eksempel, men kan ikke helt få det til at virke; hvad
når SP1 tager imod parametre, samtidig med at den rent faktisk returnerer
mere end jeg skal bruge?
Jeg prøver at skrive de to SP'er, som de ser ud nu (er mere avancerede, men
for at beskrive det, burde det her være nok):

CREATE PROCEDURE SP2
AS
DECLARE @antal integer

@antal = exec SP1
/* ^Her skal jeg udelukkende bruge variablen "antal", som SP1 blandt andet
returnerer */

SET @antal = @antal * 2
SELECT antal = @antal --eller lignende; den regner på variablen og
returnerer et resultat

GO


CREATE PROCEDURE SP1
@varenr int
AS
DECLARE @antal int
DECLARE @pris int
DECLARE @vaerdi int

SELECT @antal = antal, @pris = pris FROM lager WHERE vnr = @varenr
SET @vaerdi = @antal * @pris

SELECT antal = @antal, pris = @pris, vaerdi = @vaerdi

GO


Jeg håber du ved hvad jeg mener, og har en løsning.
MVH
Casper Bang



Ryan Dahl (03-01-2005)
Kommentar
Fra : Ryan Dahl


Dato : 03-01-05 14:02

On Mon, 3 Jan 2005 11:04:13 +0100, "Casper Bang"
<webmaster_fjerndette@fjerndette_secretsofwar.net> wrote:

Jeg tilpasser lige dine SP'ere - jeg garanterer ikke at det er helt
rigtigt - der er ihvertfald ikke testet

Forøvigt - hvis du plejer at programmere i ASP, så tænk på dine stored
procedures som subs med byref-parametre - ikke som functions, der kun
kan returnere én værdi.

mvh
Ryan

CREATE PROCEDURE SP2
@SlutResultat integer OUTPUT
AS
DECLARE @tempAntal integer
exec SP1 @tempAntal OUT
/* Nu skulle vi gerne have modtaget en værdi i @tempAntal */

/* Herefter laves dine beregninger */
SET @tempAntal = @tempAntal * 2

/* Bare lige et hurtigt eksempel */
SELECT @SlutResultat = COUNT(*) FROM TABEL1 WHERE antal = @Antal
END
GO

CREATE PROCEDURE SP1
@Antal integer OUTPUT
AS
DECLARE @antal integer
DECLARE @pris integer
DECLARE @vaerdi integer

SELECT @antal = antal, @pris = pris FROM lager WHERE vnr = @varenr

/* En stak beregninger, hvor antal bliver fundet endeligt. */
SET @vaerdi = @antal * @pris
..
..
..
SET @antal = @antal * @vaerdi

END
GO



Casper Bang (03-01-2005)
Kommentar
Fra : Casper Bang


Dato : 03-01-05 14:51

> Forøvigt - hvis du plejer at programmere i ASP, så tænk på dine stored
> procedures som subs med byref-parametre - ikke som functions, der kun
> kan returnere én værdi.

Ok, den er jeg med på.
Nu har jeg bare et relateret problem; i SP 1 har jeg nu i slutningen for
eksempel:

SET @antal = 1 -- en referenceoverførsel, til den anden SP
SELECT antal = @antal, pris = @pris -- bruges af kaldende ASP-programmer

Men tilsyneladende går dette ikke helt; ASP siden får ikke returneret den
SELECT sætning :(
Man kan åbenbart ikke have både call by ref og et returnerende select i
samme SP.

Hvordan løses dette? Skal mine ASP sider på en eller anden måde få
resultatet på en anden måde end ved et recordset (i så fald, hvordan?),
eller er det mine SPs der skal tilføjes noget i?

Mange tak for hjælpen indtil videre. Jeg håber resultatet er ved at være
fundet :)
~Casper



Ryan Dahl (05-01-2005)
Kommentar
Fra : Ryan Dahl


Dato : 05-01-05 22:48

On Mon, 3 Jan 2005 14:50:41 +0100, "Casper Bang"
<webmaster_fjerndette@fjerndette_secretsofwar.net> wrote:

>Nu har jeg bare et relateret problem; i SP 1 har jeg nu i slutningen for
>eksempel:
>
>SET @antal = 1 -- en referenceoverførsel, til den anden SP
>SELECT antal = @antal, pris = @pris -- bruges af kaldende ASP-programmer
>

Jeg har lige netop haft samme udfordring, og har nu fundet en
løsning...

I SP2 laver du en temp-tabel, som du henter data fra SP1 ind i,
hvorefter du laver en select på temp-tabellen - logisk ikke

Eksempel følger - dette laves i SP2, der burde ikke være behov for
nogen rettelser i SP1... - du skal dog lige tilpasse med egne
variabler og feltnavne....

/* lav temp-tabel */
create table #dummy (objectid varchar(15), antal integer)

/* Kør SP1 og overfør samtidigt data
insert into #dummy exec SP1 @inputvaerdi

/* hent data fra temp-tabel, så det er tilgængeligt når denne sp'er
bliver kaldt */
select objectid, antal from #dummy

/* slet temp-tabel */
drop table #dummy


Det var det...

mvh
Ryan


Casper Bang (06-01-2005)
Kommentar
Fra : Casper Bang


Dato : 06-01-05 13:31

> Det var det...

Det var det nemlig :)

Mange tak for hjælpen Ryan!! Det virker helt perfekt.



Søg
Reklame
Statistik
Spørgsmål : 177459
Tips : 31964
Nyheder : 719565
Indlæg : 6408195
Brugere : 218881

Månedens bedste
Årets bedste
Sidste års bedste