2016-05-16 2 views
0

Я пытаюсь написать процедуру, которая вставляет строки часов раньше, если процедура получает ошибку в следующий раз вставляет за 2 часа до и т.д.:Процедура/транзакция SQL Server с глобальным параметром?

Этот код перезаписывает ERROR_COUNT. как я должен объявить переменную @error_count, что значение было сохранено для каждого вызова?

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

Все глобальные переменные в t-sql предопределены. вы не можете объявить глобальную переменную, но вы можете сохранить значение в таблице или глобальную временную таблицу. –

ответ

0

Zohar is right. В Transact SQL нет такой вещи, как глобальная переменная. Даже то, что раньше называлось глобальными переменными, всегда было действительно функциями и никогда не определялось пользователем. Сохраните значение в таблице, как предложил Зоар.

+0

Хорошо. Благодаря ;))) – NIC

Смежные вопросы