2013-06-13 2 views
2

Я хочу изменить 2 переменных даты проекта, StartDateTime и EndDateTime. У меня есть другая переменная под названием RunType. Очень просто, я хочу сначала прочитать значение RunType. Если он установлен на «Инкрементальный», я хочу изменить StartDate с того, что было до 12:00:00 AM вчера, а EndDate до 23:59:59 PM вчера. Ошибки, которые я получаю от попытки записать значения, похоже, указывают на то, что записи не отображаются на переменных уровня проекта. Это правда - или есть что-то, что мне нужно делать по-разному, имея дело с этими переменными уровня проекта? Я думал о создании переменных уровня пакета, контрольной таблицы, бла-бла ... Кажется, это излишне.SSIS 2012: Как изменить переменные среды проекта?

Когда я тестирую пакет вручную, изменяя значения параметров в каталоге/средах службы интеграции, я получаю диапазон, который я ожидаю. Этот пакет будет запускаться через работу агента sql. Есть ли предварительный шаг, который я могу создать и выполнить для выполнения этой простой задачи за пределами ssis?

+0

Вы, кажется, смешиваете переменные и параметры. У вас нет переменных уровня проекта, самый высокий уровень, который вы можете определить, это пакеты. Параметры не могут быть изменены во время выполнения. – JodyT

+0

Теперь, когда я смотрю на сам проект SSIS, я вижу, что они называются параметрами - почему они называются переменными в среде в каталогах сервисов интеграции? – plditallo

+0

@JodyT - Спасибо за разъяснение. Теперь, когда вы определили их как параметры, я обнаружил, что они существуют под ssisdb в [internal]. [Object_parameters] by object_name - там в параметре_имя указаны даты диапазона, в которых я заинтересован. – plditallo

ответ

5

Хотя значения могут храниться в параметрах internal.object_parameters, не поддавайтесь искушению редактировать значения в этих таблицах напрямую. Вместо этого используйте предоставленные методы для манипуляций. В этом случае хранится процедура catalog.set_environment_variable_value.

Ниже приведен пример того, как можно программным образом изменить значение переменной окружения. Я бы рассматривал это как задание TSQL в задаче SQL Agent, которое выполняется до запуска вашего пакета, чтобы гарантировать, что правильные значения для StartDateTime и EndDateTime установлены как ожидалось.

DECLARE @var sql_variant; 

DECLARE 
    @StartDateTime date 
, @EndDateTime datetime 
, @RunType bit = 1; 

SELECT 
    @StartDateTime = CAST(dateadd(d, -1, CURRENT_TIMESTAMP) AS date) 
, @EndDateTime = DATEADD(s, -1, cast(cast(current_timestamp AS date) AS datetime)) 

SELECT @StartDateTime, @EndDateTime; 


IF (@RunType = 1) 
BEGIN 
    SET @var = @StartDateTime; 
    EXECUTE [SSISDB].[catalog].[set_environment_variable_value] 
     @variable_name=N'StartDateTime' 
    , @environment_name=N'MyEnvironmentName' 
    , @folder_name=N'MyFolder' 
    , @[email protected]; 

    SET @var = @EndDateTime; 
    EXECUTE [SSISDB].[catalog].[set_environment_variable_value] 
     @variable_name=N'EndDateTime' 
    , @environment_name=N'MyEnvironmentName' 
    , @folder_name=N'MyFolder' 
    , @[email protected]; 
END 
ELSE 
BEGIN 
    PRINT 'Logic goes here to handle the other conditions for RunType' 
END 
+0

вы так правы ... соблазн был почти подавляющим! :) – plditallo

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