Объединить config-параметры с параметрами, переданными из командной строки - PullRequest
1 голос
/ 28 апреля 2010

Я создал SSIS-пакет, который импортирует файл в таблицу (достаточно просто). У меня есть некоторые переменные, некоторые из которых установлены в конфигурационном файле, такие как сервер, база данных, папка импорта. во время выполнения я хочу передать имя файла. Это делается с помощью хранимой процедуры с использованием dtexec. При настройке параметров через конфигурационный файл он работает также хорошо, когда задает все параметры в процедуре и передает их с помощью оператора \ Set (см. Ниже). когда я пытаюсь на лету объединить config-версию с параметрами настроек, я получаю сообщение об ошибке, указывающее путь к config-файлам, который был задан во время разработки.

Кто-нибудь сталкивался с этим и нашел для него решение?

С уважением, Фредерик

DECLARE @SSISSTR            VARCHAR(8000),
        @DataBaseServer     VARCHAR(100),
        @DataBaseName       VARCHAR(100),
        @PackageFilePath    VARCHAR(200),
        @ImportFolder       VARCHAR(200),
        @HandledFolder      VARCHAR(200),
        @ConfigFilePath     VARCHAR(200),
        @SSISreturncode     INT;

/* DEBUGGING
    DECLARE  @FileName VARCHAR(100),
             @SelectionId INT
    SET @FileName = 'Test.csv';
    SET @SelectionId = 366; 
*/  
SET @PackageFilePath = '/FILE "Y:\SSIS\Packages\PostalCodeSelectionImport\ImportPackage.dtsx" ';
SET @DataBaseServer = 'STOSWVUTVDB01\DEV_BSE';
SET @DataBaseName = 'BSE_ODR';
SET @ImportFolder = '\\Stoswvutvbse01\Application\FileLoadArea\ODR\\';
SET @HandledFolder = '\\Stoswvutvbse01\Application\FileLoadArea\ODR\Handled\\';
--SET @ConfigFilePath =  '/CONFIGFILE "Y:\SSIS\Packages\PostalCodeSelectionImport\Configuration\DEV_BSE.dtsConfig" ';

----now making "dtexec" SQL from dynamic values
SET @SSISSTR = 'DTEXEC ' + @PackageFilePath;    -- + @ConfigFilePath;
SET @SSISSTR = @SSISSTR + ' /SET \Package.Variables[User::SelectionId].Properties[Value];' + CAST( @SelectionId AS VARCHAR(12));    
SET @SSISSTR = @SSISSTR + ' /SET \Package.Variables[User::DataBaseServer].Properties[Value];"' + @DataBaseServer + '"';
SET @SSISSTR = @SSISSTR + ' /SET \Package.Variables[User::ImportFolder].Properties[Value];"' + @ImportFolder + '" ';
SET @SSISSTR = @SSISSTR + ' /SET \Package.Variables[User::DataBaseName].Properties[Value];"' + @DataBaseName + '" ';
SET @SSISSTR = @SSISSTR + ' /SET \Package.Variables[User::ImportFileName].Properties[Value];"' + @FileName + '" ';  
SET @SSISSTR = @SSISSTR + ' /SET \Package.Variables[User::HandledFolder].Properties[Value];"' + @HandledFolder + '" ';   

-- Now execute dynamic SQL by using EXEC.       
    EXEC @SSISreturncode = xp_cmdshell @SSISSTR;    

1 Ответ

0 голосов
/ 28 апреля 2010

Предполагая, что все переменные, кроме User :: ImportFileName установлены в вашем configfile, должно работать следующее:

DECLARE @SSISSTR            VARCHAR(8000),
        @PackageFilePath    VARCHAR(200),  
        @ConfigFilePath     VARCHAR(200), 
        @SSISreturncode     INT; 
        @FileName           VARCHAR(100)

SET @FileName = 'Test.csv'; 
SET @PackageFilePath = '/FILE "Y:\SSIS\Packages\PostalCodeSelectionImport\ImportPackage.dtsx" '; 
SET @ConfigFilePath =  '/CONFIGFILE "Y:\SSIS\Packages\PostalCodeSelectionImport\Configuration\DEV_BSE.dtsConfig" '; 

--now making "dtexec" SQL from dynamic values 
SET @SSISSTR = 'DTEXEC ' + @PackageFilePath + @ConfigFilePath; 
SET @SSISSTR = @SSISSTR + '/SET "\Package.Variables[User::ImportFileName].Properties[Value]";"' + @FileName + '" ';   

-- Now execute dynamic SQL by using EXEC.        
    EXEC @SSISreturncode = xp_cmdshell @SSISSTR;   

Отличия от вашего кода:

  1. Мой код не устанавливает значения для переменных, установленных в файле конфигурации
  2. Строка "\ Package.Variables [User :: ImportFileName] .Properties [Value]" указана в моей версии
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...