Avatar billede bobber Nybegynder
15. maj 2006 - 16:17 Der er 3 kommentarer og
1 løsning

Hjælp til Stored Procedure med temp tabel og insert/update

Hejsa, Jeg er simpelhen gået sukker koldt, er der evt nogen som kan fortælle mig hvad jeg gør forkert i denne stored procedure da den ikke vil acceptere min else eller end, som om jeg ikke får sluttet den ordentligt.

Eller kan det overhoved lade sig gøre på den måde jeg gør det eller et bud på en nemmere måde at skrive den på.

Det som den gør er at indsætte en ny linie i en tabel, men hvis den findes i forvejen skal den bare opdatere dennne, grunden til at jeg bruger temp tabel er at jeg ikke på forhånd ved hvad Jobno er  men kan opsnappe dette udfra totalId nummeret.

Jeg har fået denne her til at virke hvis jeg kun ønsker at indsætte ny linie, men så snart jeg har sat min if exist / update så går det galt.

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go



ALTER PROCEDURE [dbo].[SpInsertDisplaced]
   
    (
        @UserId varchar(15),
        @Date smalldatetime,
        @DisplacedQuantity float
    )

    AS

    SET NOCOUNT ON

    Create table #tmptable
    (
    UserId varchar(15),
    Date smalldatetime,
    StateId int,   
    PhaseCode varchar(15),
    TaskCode varchar(15),
    Quantity float,
    DisplacedQuantity float,
    TotalId int,
    IsDisplaced bit
    )
    Insert Into [#tmptable]
    (
    [UserId], [Date],[StateId],[PhaseCode],     [TaskCode],[Quantity],     [DisplacedQuantity],[TotalId],[IsDisplaced]
    )
    values (@UserId, @Date, 2, 0, 0,0, @DisplacedQuantity,     50015, 1 )

   
    IF exists (
        Select *
        from [TbJobJournal] tjj
        where
            [UserId] = @UserId
            and [Date] = @Date
            and [IsDisplaced] = 1
            and [Jobno] in
            (select Jobno from Tbjobs tj
            INNER JOIN #tmptable t on t.TotalId =             tj.totalId
            where t.TotalID = tj.TotalId))
   
       
    BEGIN
        Update [TbJobJournal]
        set [DisplacedQuantity] = @DisplacedQuantity
        where
            [UserId] = @UserId
            and [Date] = @Date
            and [IsDisplaced] = 1
            and [Jobno] in
            (select Jobno from Tbjobs tj
            INNER JOIN #tmptable t on t.TotalId =             tj.totalId
            where t.TotalID = tj.TotalId)

    Else BEGIN

    Insert Into
    TbjobJournal(JobNo, UserId, StateId, PhaseCode,         Taskcode, Date, Quantity,DisplacedQuantity,         IsDisplaced)
    Select JobNo, UserId, StateId, PhaseCode, Taskcode,         Date, Quantity, DisplacedQuantity, IsDisplaced
    from #tmptable t
    Inner Join tbJobs tj on tj.TotalId = t.TotalId

    END
Avatar billede fennec Nybegynder
15. maj 2006 - 16:26 #1
Mangler du ikke en END til den første BEGIN:

END
Else BEGIN
Avatar billede ldanielsen Nybegynder
15. maj 2006 - 22:08 #2
Jo

Enten ser man det på 5 sekunder, eller også får man aldrig øje på det, er det ikke sært? :o)
Avatar billede bobber Nybegynder
16. maj 2006 - 08:46 #3
Ja fennec, det utroligt at man kan stirre sig blind på dette... takker mange gange og smid et svar så skal du få dine point.
Avatar billede fennec Nybegynder
16. maj 2006 - 08:49 #4
.o) <-- One Eyed Jack
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