2016-05-16 9 views
0

Ich versuche, ein Verfahren zu schreiben, die früheren Reihen von Stunden fügt, wenn Prozedur einen Fehler beim nächsten Mal fügt 2 Stunden vor dem usw. bekommt:SQL Server-Prozedur/Transaktion mit globalem Parameter?

Dieser Code überschreibt ERROR_COUNT. Wie muss ich eine Variable @error_count deklarieren, dass Wert für jeden Anruf gespeichert wurde?

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

ALTER PROCEDURE [dbo].[errorcount] 
AS 
BEGIN 
    DECLARE @Data DateTime 
    DECLARE @error_count int 

    SET @error_count = 0 

    -- if first run error_count = 0 -- 
    SET @Data = DATEADD(HOUR, -1 * @error_count - 1, GETDATE()) 

    BEGIN TRANSACTION 
     Select ... where Date > @Date 
     IF @@ERROR <> 0 
      BEGIN 
       ROLLBACK TRANSACTION 
       set @error_count= @error_count + 1; 

      END 
     ELSE begin 
     COMMIT TRANSACTION 
     set @error_count = 0 
    end 
END 
+1

Alle globalen Variablen in t-sql sind vordefiniert. Sie können keine globale Variable deklarieren, aber Sie können einen Wert in einer Tabelle oder einer globalen temporären Tabelle speichern. –

Antwort

0

Zohar hat Recht. In Transact SQL gibt es keine globale Variable. Sogar das, was früher globale Variablen genannt wurden, waren immer wirklich Funktionen und waren niemals benutzerdefinierbar. Speichern Sie den Wert in einer Tabelle, wie Zohar vorgeschlagen hat.

+0

Ok. Vielen Dank ;))) – NIC