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?
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.
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
Synes godt om
Ny brugerNybegynder
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.