Avatar billede slumtiger Nybegynder
29. august 2011 - 10:55 Der er 6 kommentarer

Simpelt problem, men jeg er novice :)

Jeg har følgende Stored procedure:

USE [SSCC_Thise]
GO
/****** Object:  StoredProcedure [dbo].[IncSSCC]    Script Date: 08/29/2011 09:30:59 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET NOCOUNT ON
GO

-- =============================================
-- Author:        SSCCcounter
-- Create date:
-- Description:   
-- =============================================
ALTER PROCEDURE [dbo].[IncSSCC]
    (@SSCC_ID int = 0,
    @SSCCcnt int = 0)
AS
DECLARE @CntVal varchar(5);

BEGIN TRY
    BEGIN TRANSACTION
        SELECT @CntVal = CounterVal  FROM SSCCCntTabel WHERE SSCC_ID = 1;
        SET @CntVal += 1;
       
        UPDATE SSCCCntTabel SET CounterVal = '00008' WHERE SSCC_ID = 1;
    COMMIT TRANSACTION
END TRY
BEGIN CATCH
END CATCH
RETURN 0

Nogle af linierne har umiddelbart ingen anvendelse, men det beror på debugging.
Problemet er at der ikke sker nogen ændring i min tabel.
Ser det ikke fornuft nok ud?
Avatar billede ulrikm Nybegynder
29. august 2011 - 11:15 #1
Ryger den i catch? fjern evt begin try/end try/begin catch/end catch eller udvid din catch til at outputte fejlen:

declare @msg varchar(255)
select @msg = 'error procedure =''' + coalesce(ERROR_PROCEDURE(),'null') + ''''
    + ', error line=' + coalesce(convert(varchar,ERROR_LINE()),'null')
    + ', Message=''' + coalesce(ERROR_MESSAGE(),'null') + ''''

print @msg
Avatar billede slumtiger Nybegynder
29. august 2011 - 11:32 #2
Hej ulrikm

Det ser ikke ud som om at den ryger i catch.
Jeg får blot en
'Command(s) completed successfully'

Men min CounterVal indeholder stadig den gamle værdi!
Avatar billede slumtiger Nybegynder
29. august 2011 - 11:35 #3
Hvis jeg efter 'SET @CntVal += 1;' indsætter en 'PRINT @CntVal;', burde den så ikke skrive en værdi under Messages?
Avatar billede ulrikm Nybegynder
29. august 2011 - 13:49 #4
"+=" er ikke understøttet i MS SQL, så vidt jeg ved:

SET @CntVal = @CntVal + 1
Avatar billede HenrikSjang Nybegynder
03. september 2011 - 12:00 #5
Findes der overhovedet nogle rækker i SSCCCntTabel som opfylder SSCC_ID = 1 ?

Prøv lige at fyre denne af:
SELECT CounterVal  FROM SSCCCntTabel WHERE SSCC_ID = 1;

Derudover så er data typen af @CntVal en varchar(5), men du lægger 1 til via en += (syntaxen af += blev introduceret i SQL Server 2008). Så er du sikker på at værdien af @CntVal rent faktisk er en integer? For ellers vil du få en conversion fejl, og dermed lande i din catch block.

Til sidst så tæller du @CntVal op med 1, men du bruger jo ikke den variable i din update statement, så værdien vil jo altid være 8.
Avatar billede jtbroad Nybegynder
29. september 2011 - 15:42 #6
Du erklærer også din procedure til at bruge 2 parametre at du efterfølgende ikke bruger til noget.

Som jeg læser det er eneste formål med den procedure at opdater
et felt i tabellen med en fast værdi ud fra en fast condition.

Variablerne er overflødige.

Create Procedure dbo.Do_something()
as
update dbo.tablenavn
Set feltnavn = '00008' where feltnavn2 = 1
end
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