Avatar billede harisk Nybegynder
26. juli 2005 - 13:40 Der er 12 kommentarer og
1 løsning

fejl i storedprocedure (sub query), som alligevel virker fint :S

hejsa,
jeg får følgende fejl når jeg kører min stored procedure:

System.Data.SqlClient.SqlException: Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression. Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

Selve koden bag proceduren ser sådan ud:

ALTER PROCEDURE dbo.SinglePurchaseDealStatus_Update

    (
        @SerialNumber nvarchar(18),
        @Status int,
        @ApproveDate1 datetime,
        @ApproveDate2 datetime,
        @ApproveDate3 datetime,
        @ClosedDate datetime,
        @WorkerID int,
        @ManagerID int,
        @ProviderID int,
        @ClosedID int,
        @RejectionText ntext,
        @CancelStatus int,
        @TerminationStatus int
    )

AS

BEGIN TRAN

    UPDATE
        SinglePurchaseDealStatus
    SET
        Status        = @Status,
        ApproveDate1  = @ApproveDate1,
        ApproveDate2  = @ApproveDate2,
        ApproveDate3  = @ApproveDate3,
        ClosedDate    = @ClosedDate,
        WorkerID      = @WorkerID,
        ManagerID    = @ManagerID,
        ProviderID    = @ProviderID,
        ClosedID      = @ClosedID,
        RejectionText = @RejectionText,
        CancelStatus  = @CancelStatus,
        TerminationStatus = @TerminationStatus
    WHERE
        SerialNumber = @SerialNumber


    IF @Status = 3
    BEGIN
        UPDATE
            KOMMAProject
        SET       
            ReservedSeats = ReservedSeats+1   
        WHERE
            KOMMAProjectID IN (SELECT KOMMAProjectID FROM ServicePurchase WHERE SerialNumber = @SerialNumber)
    END
   
    DECLARE @TerminationCauseID int
    DECLARE @EndingCauseID int
   
    SET @TerminationCauseID = (SELECT TerminationCauseID FROM ServicePurchase WHERE SerialNumber = @SerialNumber)
    SET @EndingCauseID = (SELECT EndingCauseID FROM ServicePurchase WHERE SerialNumber = @SerialNumber)
   
    IF  @Status > 3 AND @TerminationCauseID = -1 AND @EndingCauseID = -1
    BEGIN
        UPDATE
            KOMMAProject
        SET       
            ReservedSeats = ReservedSeats - 1
        WHERE
            KOMMAProjectID IN (SELECT KOMMAProjectID FROM ServicePurchase WHERE SerialNumber = @SerialNumber)
    END


IF @@ERROR <> 0
    ROLLBACK TRAN
ELSE
    COMMIT TRAN
GO

Hvad er det der driller? Som sagt så bliver status opdateret og det hele kører fint nok, undtaget den nævnte fejl meddelse.

På forhånd tak
Avatar billede arne_v Ekspert
26. juli 2005 - 13:55 #1
en af de her 2 queries må returnere mere end en værdi:

  SET @TerminationCauseID = (SELECT TerminationCauseID FROM ServicePurchase WHERE SerialNumber = @SerialNumber)
    SET @EndingCauseID = (SELECT EndingCauseID FROM ServicePurchase WHERE SerialNumber = @SerialNumber)
Avatar billede harisk Nybegynder
26. juli 2005 - 13:58 #2
ok, så det er ikke en af de 2 andre med UPDATE?? jeg prøver lige at få de variabler med ud...
Avatar billede arne_v Ekspert
26. juli 2005 - 14:02 #3
UPDATE bruger IN og så er flere værdier tilladt
Avatar billede harisk Nybegynder
26. juli 2005 - 14:03 #4
selvfølgeligt :D
Avatar billede ldanielsen Nybegynder
26. juli 2005 - 22:51 #5
Det bør jo ikke være en overraskelse at de returnerer mere end én værdi, måske ved du at det er den rigtige værdi uanset det. At der kommer to rækker ud vil give fejl uanset at den værdi du selecter er den samme i begge rækker.

Hvis du er tryg ved at koden er rigtig kan du hurtigt klare det med SELECT TOP 1 ...
Avatar billede harisk Nybegynder
27. juli 2005 - 11:12 #6
jeg løste det ved at lave variabler om til tabeller der indeholder de opslåede værdier i stedet for, så det funker perfekt nu uden advarsler ;)
Avatar billede arne_v Ekspert
27. juli 2005 - 18:38 #7
jeg vil ligge et svar for at pege på de linier
Avatar billede harisk Nybegynder
28. juli 2005 - 12:05 #8
hvorfor forsvinder Accepter knappen ikke?? :S
Avatar billede harisk Nybegynder
28. juli 2005 - 12:08 #9
sorry arne_v men der er et eller andet galt med at acceptere svaret! :( den vil bare ikke!
Avatar billede arne_v Ekspert
28. juli 2005 - 12:19 #10
har du markeret mit navn ude til venstre i combo boxen så det er blåt inden du
klikker accepter ?
Avatar billede harisk Nybegynder
28. juli 2005 - 13:44 #11
nåååå den skal markeres først! yep, nu funkder det godt nok. Tak for hjælpen. Hvis du har forstand på c# er du meget velkommen til at kaste et blik på mit indlæg derinde også. Der er åbenbart ingen der kan sige noget om emnet :(
Avatar billede arne_v Ekspert
28. juli 2005 - 13:46 #12
jeg koder i C#

men ikke så meget web
Avatar billede harisk Nybegynder
28. juli 2005 - 13:47 #13
nå ok, tak for hjælpen alligevel :)
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



Seneste spørgsmål Seneste aktivitet
I dag 10:28 PDFEngine Af barth i Andet software
I går 22:40 Butte indhold i celler Af lurup i Excel
I går 15:24 Power Query Af djsimonsen i Excel
I går 14:43 Hvis ikke på liste, tilføj værdier til liste Af TheLibrarian i Excel
I går 11:33 Windows 11 Af ranni i Windows