Avatar billede tigerdyr Nybegynder
16. september 2000 - 22:25 Der er 7 kommentarer og
1 løsning

Nested SP

Så løb jeg panden mod muren, jeg står og skal lave en stored procedure (dvs. det er i praksis 2), der kaldes med nogle parametre, nogle af parametrene skal så igen bruges til at kalde en anden SP der skal returnere sit ID til den første...
De to tabeller ser cirka sådan ud:
CREATE TABLE Skema(
  ID        Int        Not Null,
  Uge1        Int        Not Null,
  Uge2        Int        Not Null,
  Uge3        Int        Not Null,
  Uge4        Int        Not Null,
  Uge5        Int        Not Null,
  Uge6        Int        Not Null,
  Uge7        Int        Not Null,
  Uge8        Int        Not Null,
  Klasse    Int        Not Null
)
ON SecondaryFileGroup

CREATE TABLE Uge(
  ID        Int        IDENTITY,
  UgeNr        TinyInt        Not Null,
  Beskrivelse    Varchar(500)    Not Null
)
ON TertiaryFileGroup

Ideen og problemet er så at få lavet de 2 SP\'er til hhv. Skema og Uge, hvor jeg indtil nu er nået til at \"Skema\" skal modtage parametre for klasse, og 8x beskrivelse + 8x ugenr, 8 gange (for hver af de 8 beskrivelse + ugenr) skal den så kalde Uge SP\'en, der skal returnere sit ID og til sidst skal Skema SP\'en så selv indsætte en ny post i Skema entiteten, med klasse (parameter), og de 8 returnerede ID\'s fra Uge SP\'en...

Any help ??
Avatar billede tigerdyr Nybegynder
18. september 2000 - 11:07 #1
Jeg er selv klar over at jeg skal lave Uge SP\'en med et eller andet som output... men men men, jeg kan simpelthen ikke gennemskue det!
Avatar billede tigerdyr Nybegynder
20. september 2000 - 21:29 #2
Nå ikke... jeg kan forhåbentligt selv smide svaret herind på et tidspunkt!
Avatar billede prh Nybegynder
06. oktober 2000 - 19:37 #3
CREATE PROCEDURE SP_Skema
    @Klasse int,
    @UgeNr1 tinyint,
    @Beskrivelse1 varchar(500),
    @UgeNr2 tinyint,
    @Beskrivelse2 varchar(500),
    @UgeNr3 tinyint,
    @Beskrivelse3 varchar(500),
    @UgeNr4 tinyint,
    @Beskrivelse4 varchar(500),
    @UgeNr5 tinyint,
    @Beskrivelse5 varchar(500),
    @UgeNr6 tinyint,
    @Beskrivelse6 varchar(500),
    @UgeNr7 tinyint,
    @Beskrivelse7 varchar(500),
    @UgeNr8 tinyint,
    @Beskrivelse8 varchar(500)
AS
BEGIN
    DECLARE @ID1 int
    DECLARE @ID2 int
    DECLARE @ID3 int
    DECLARE @ID4 int
    DECLARE @ID5 int
    DECLARE @ID6 int
    DECLARE @ID7 int
    DECLARE @ID8 int

    BEGIN TRANSACTION

    EXEC SP_uge @Beskrivelse1, @UgeNr1, @ID1 OUTPUT
    EXEC SP_uge @Beskrivelse2, @UgeNr2, @ID2 OUTPUT
    EXEC SP_uge @Beskrivelse3, @UgeNr3, @ID3 OUTPUT
    EXEC SP_uge @Beskrivelse4, @UgeNr4, @ID4 OUTPUT
    EXEC SP_uge @Beskrivelse5, @UgeNr5, @ID5 OUTPUT
    EXEC SP_uge @Beskrivelse6, @UgeNr6, @ID6 OUTPUT
    EXEC SP_uge @Beskrivelse7, @UgeNr7, @ID7 OUTPUT
    EXEC SP_uge @Beskrivelse8, @UgeNr8, @ID8 OUTPUT

    INSERT INTO
        Skema (Uge1, Uge2, Uge3, Uge4, Uge5, Uge6, Uge7, Uge8, Klasse)
    VALUES   
        (@ID1, @ID2, @ID3, @ID4, @ID5, @ID6, @ID7, @ID8, @Klasse)

    COMMIT TRANSACTION
END
GO

CREATE PROCEDURE SP_Uge
    @Beskrivelse varchar(500),
    @UgeNr tinyint,
    @ID int OUTPUT
AS
BEGIN
    INSERT INTO Uge (UgeNr, Beskrivelse) VALUES(@UgeNr, @Beskrivelse)
    SET @ID = @@IDENTITY
END

GO


EXEC SP_Skema 5, 1, \'uge1\', 2, \'uge2\', 3, \'uge3\', 4, \'uge4\', 5, \'uge5\', 6, \'uge6\', 7, \'uge7\', 8, \'uge8\'


Avatar billede prh Nybegynder
06. oktober 2000 - 19:40 #4
Jeg regnede med at du mente at du i SP_Uge ville indsætte de værdier i tabellen, og så returnere den ID som de blev genereret af Identity værdien...

Hvis du ville slå op i Uge tabellen baseret på værdierne så :

CREATE PROCEDURE SP_Uge
    @Beskrivelse varchar(500),
    @UgeNr tinyint,
    @ID int OUTPUT
AS
BEGIN
  SELECT @ID = ID FROM Uge WHERE UgeNr = @UgeNr AND Beskrivelse = @Beskrivelse
END

GO
Avatar billede prh Nybegynder
06. oktober 2000 - 19:41 #5
Og nå ja, den tabel du lavede for Skema skal ID vidst være Identity ???

Anyway, ellers hvis der er noget kan du email\'e mig på prh@jubii.dk

Svøllen
Avatar billede tigerdyr Nybegynder
06. oktober 2000 - 21:56 #6
Det ligner ikke helt den løsning jeg selv kom frem til men tæt på...(Greb den sidste udvej, da systemet SKULLE være færdigt og afleveret 22/9, og kontaktede en forfatter til en SQL Server prog. bog, som venligt nok mindede mig om at kalde en SP med named parameters...
Avatar billede prh Nybegynder
09. oktober 2000 - 09:42 #7
Hvordan var din løsning så ?
Avatar billede tigerdyr Nybegynder
09. oktober 2000 - 20:56 #8
Tjaa... valgte at undlade transact-SQL osv., så sådan her:
CREATE PROCEDURE SP_NyUge
  @UgeNr TinyInt,
  @Besk Varchar(500),
  @NytID int OUTPUT
  WITH RECOMPILE
  AS
  INSERT INTO Uge VALUES (@UgeNr, @Besk)
  SELECT @NytID = @@IDENTITY
GO

CREATE PROCEDURE SP_NytSkema
  @UgeNr1 TinyInt,
  @Besk1 Varchar(500),
  @ID1 int OUTPUT,
  @UgeNr2 TinyInt,
  @Besk2 Varchar(500),
  @ID2 int OUTPUT,
  @UgeNr3 TinyInt,
  @Besk3 Varchar(500),
  @ID3 int OUTPUT,
  @UgeNr4 TinyInt,
  @Besk4 Varchar(500),
  @ID4 int OUTPUT,
  @UgeNr5 TinyInt,
  @Besk5 Varchar(500),
  @ID5 int OUTPUT,
  @UgeNr6 TinyInt,
  @Besk6 Varchar(500),
  @ID6 int OUTPUT,
  @UgeNr7 TinyInt,
  @Besk7 Varchar(500),
  @ID7 int OUTPUT,
  @UgeNr8 TinyInt,
  @Besk8 Varchar(500),
  @ID8 int OUTPUT,
  @Klasse Int
  WITH RECOMPILE
  AS
  EXEC SP_NyUge @UgeNr = @UgeNr1, @Besk = @Besk1, @NytID = @ID1 OUTPUT
  SELECT @ID1
  EXEC SP_NyUge @UgeNr = @UgeNr2, @Besk = @Besk2, @NytID = @ID2 OUTPUT
  SELECT @ID2
  EXEC SP_NyUge @UgeNr = @UgeNr3, @Besk = @Besk3, @NytID = @ID3 OUTPUT
  SELECT @ID3
  EXEC SP_NyUge @UgeNr = @UgeNr4, @Besk = @Besk4, @NytID = @ID4 OUTPUT
  SELECT @ID4
  EXEC SP_NyUge @UgeNr = @UgeNr5, @Besk = @Besk5, @NytID = @ID5 OUTPUT
  SELECT @ID5
  EXEC SP_NyUge @UgeNr = @UgeNr6, @Besk = @Besk6, @NytID = @ID6 OUTPUT
  SELECT @ID6
  EXEC SP_NyUge @UgeNr = @UgeNr7, @Besk = @Besk7, @NytID = @ID7 OUTPUT
  SELECT @ID7
  EXEC SP_NyUge @UgeNr = @UgeNr8, @Besk = @Besk8, @NytID = @ID8 OUTPUT
  SELECT @ID8
  INSERT INTO Skema VALUES (@ID1, @ID2, @ID3, @ID4, @ID5, @ID6, @ID7, @ID8, @Klasse)
GO
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