2010-04-28 5 views
1

J'ai créé un package SSIS qui importe un fichier dans une table (assez simple). J'ai quelques variables, quelques-unes dans un fichier de configuration comme serveur, base de données, importfolder. à l'exécution je veux passer le nom de fichier. Ceci est fait grâce à une procédure stockée utilisant dtexec. Lors de la définition des paramètres dans le fichier configfile, cela fonctionne également lorsque vous définissez tous les paramètres dans la procédure et que vous les transmettez avec l'instruction \ Set (voir ci-dessous). Lorsque j'essaie de combiner la configuration de config avec les paramètres à la volée, j'obtiens une erreur renvoyant au chemin des fichiers de configuration qui a été défini au moment du design.Combiner les paramètres de configuration avec les paramètres transmis par la ligne de commande

Est-ce que quelqu'un a trouvé cela et a trouvé une solution?

Cordialement Frederik

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;  

Répondre

0

En supposant que toutes les variables sauf utilisateur :: ImportFileName sont définies dans votre configfile, ce qui suit devrait fonctionner:

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; 

Les différences de votre code sont:

  1. Mon code ne définit pas les valeurs pour les variables définies dans le fichier de configuration
  2. La chaîne "\ Package.Variables [User :: ImportFileName] .Properties [Value]" est citée dans ma version
Questions connexes