Avatar billede misbruger Nybegynder
18. oktober 2004 - 15:51 Der er 4 kommentarer og
1 løsning

Retur værdi fra SQL 2000 SP

Jeg har følgende proc...

CREATE PROCEDURE sp_AddArtToTrack

    @TrackId int,
    @ArtId int

AS

    SET NOCOUNT ON

    BEGIN

        SELECT AT.[Id] FROM ArtTrack AT WHERE AT.TrackId = @TrackId AND AT.ArtId = @ArtId

        IF @@ROWCOUNT < 1
        BEGIN
            INSERT INTO ArtTrack ( TrackId, ArtId ) VALUES ( @TrackId, @ArtId ) SELECT @@IDENTITY
        END

    END
GO

Hvordan for jeg den til at returnere @@Identity, såfremt det er ikke findes nogle post i query'en ?

Jeg benytter følgende C# kode....

SqlConnection Conn = new SqlConnection(connStr);
SqlCommand Cmd = new SqlCommand("sp_AddArtTrack", Conn);
Cmd.CommandType = CommandType.StoredProcedure;

Cmd.Parameters.Add("@ArtId",SqlDbType.Int).Value = art.Id;
Cmd.Parameters.Add("@TrackId",SqlDbType.Int).Value = track.Id;

Conn.Open();
int Index = Convert.ToInt32(Cmd.ExecuteScalar());
Conn.Close();


Såfremt der findes en post i query'en, returneres den, og den læses ligeledes af ExecuteScalar().
Såfremt der ikke findes en post, og der dermed bliver oprettet en post, fanger ExecuteScalar() ikke @@Identity

Hvad gør jeg forkert ?

Thanx!
Avatar billede arne_v Ekspert
18. oktober 2004 - 16:06 #1
Det er jo et seperat result set der returneres ved SELECT nummer to.

Assign det du skal bruge over i en variabel og
SELECT så den til et result set til sidst sidst.
Avatar billede misbruger Nybegynder
18. oktober 2004 - 16:15 #2
Jeg har også prøvet...

CREATE PROCEDURE sp_AddArtToTrack

    @TrackId int,
    @ArtId int

AS
    DECLARE @id int
    Set @id = 0

    SET NOCOUNT ON

    BEGIN

        SELECT @id = AT.[Id] FROM ArtTrack AT WHERE AT.TrackId = @TrackId AND AT.ArtId = @ArtId

        IF @@ROWCOUNT < 1
        BEGIN
            INSERT INTO ArtTrack ( TrackId, ArtId ) VALUES ( @TrackId, @ArtId ) SELECT @id = @@IDENTITY
        END

        RETURN @id

    END
GO

Men ExecuteScalar() fanger kun først kolonne i først række, og en returværdi af denne slags er ikke en del af et set.

Jeg er ikke helt sikker på jeg forstår hvad du mener ?
Avatar billede arne_v Ekspert
18. oktober 2004 - 16:18 #3
Korrekt. Det er en return værdi. Sådan en kan man også hente. Men ganske
rigtigt ikke med ExecuteScalar.

Men prøv og erstat:

RETURN @id

med

SELECT @id
Avatar billede misbruger Nybegynder
18. oktober 2004 - 16:21 #4
hehe selvf. :D

Nogle gange kan man ikke se skoven for bare træer.

Takker!
Avatar billede arne_v Ekspert
18. oktober 2004 - 16:28 #5
så ligger jeg et svar
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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