Avatar billede beorndesign Nybegynder
12. december 2007 - 11:09 Der er 4 kommentarer og
1 løsning

Kald af Stored Procedure i Stored Procedure

Jeg har en stored procedure, som kopiere data fra en tabel til en anden, men jeg skal have hentet et unikt id fra en anden tabel, ved hjælp af en stored procedure:

ALTER PROCEDURE SP(
    @id int
    )
AS

BEGIN

DECLARE    @SEQNO int

EXEC    [SANDXAL35].[dbo].[sp_seqno]
        @increment = 1,
        @dataset = N'A03'

SELECT    'SEQNO' = @SEQNO

INSERT INTO XWEBSALESTABLE (DATASET, ROWNUMBER)
SELECT    DATASET, @SEQNO
FROM        OrderHeader
WHERE        id = @id
           
END

I kørslen, kan jeg se, at jeg får en korrekt værdi retur fra 'sp_seqno' Men @SEQNO får værdien 0 (nul ikke null)?

sp_seqno ser således ud:
ALTER PROCEDURE [spseqno]  @increment INT, @dataset CHAR(3) AS  BEGIN TRAN
UPDATE SEQ SET SEQNO = SEQNO + @increment
WHERE DATASET = @dataset AND SEQID = 0
SELECT (SEQNO - @increment) FROM SEQ
WHERE DATASET = @dataset AND SEQID = 0
COMMIT TRAN

Hvordan kan jeg sætte værdien (SEQNO - @increment) ind i min første SP???
Avatar billede lorentsnv Nybegynder
12. december 2007 - 13:37 #1
Du giver ikke @SEQNO nogen værdi i proceduren sp.

Du kan vurdere at returnere @SEQNO med RETURN i sp_seqno.

Eksempel på brug af Return:

USE AdventureWorks;
GO
CREATE PROCEDURE checkstate @param varchar(11)
AS
IF (SELECT StateProvince FROM Person.vAdditionalContactInfo WHERE ContactID = @param) = 'WA'
    RETURN 1
ELSE
    RETURN 2;
GO



DECLARE @return_status int;
EXEC @return_status = checkstate '2';
SELECT 'Return Status' = @return_status;
GO
Avatar billede lorentsnv Nybegynder
12. december 2007 - 13:44 #2
ALTER PROCEDURE [spseqno]  @increment INT, @dataset CHAR(3) AS  BEGIN TRAN
Declare @ReturnValue int

UPDATE SEQ SET SEQNO = SEQNO + @increment
WHERE DATASET = @dataset AND SEQID = 0

SELECT @ReturnValue = SEQNO FROM SEQ
WHERE DATASET = @dataset AND SEQID = 0

Return @ReturnValue
COMMIT TRAN




ALTER PROCEDURE SP(
    @id int
    )
AS

BEGIN

DECLARE    @SEQNO int

EXEC    @SEQNO = [SANDXAL35].[dbo].[sp_seqno]
        @increment = 1,
        @dataset = N'A03'

INSERT INTO XWEBSALESTABLE (DATASET, ROWNUMBER)
SELECT    DATASET, @SEQNO
FROM        OrderHeader
WHERE        id = @id
           
END


NB. RETURN kan kun have integer værdi.
Alternativt skal du kigge på OUTPUT parametre i procedurer, eller lave noget i retnign af:

ALTER PROCEDURE SP(
    @id int
    )
AS

BEGIN

DECLARE    @SEQNO int

EXEC    [SANDXAL35].[dbo].[sp_seqno]
        @increment = 1,
        @dataset = N'A03'


SELECT @SEQNO = SEQNO FROM SEQ
WHERE DATASET = N'A03' AND SEQID = 0

INSERT INTO XWEBSALESTABLE (DATASET, ROWNUMBER)
SELECT    DATASET, @SEQNO
FROM        OrderHeader
WHERE        id = @id
           
END
Avatar billede lorentsnv Nybegynder
14. december 2007 - 10:13 #3
Har du løst dit problem?
Avatar billede beorndesign Nybegynder
17. januar 2008 - 16:24 #4
Tak for hjælpen.
Jeg valgte at returnere @SEQNO med RETURN. Det var blot en stored procedure, som er lavet af Microsoft til brug i ERP system, så jeg ville gerne kunne bruge den, som den var.

Smid et svar, og du vil få dine point...
Avatar billede beorndesign Nybegynder
09. juli 2008 - 11:50 #5
Lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester