2017-09-24 3 views
0

J'essaie d'utiliser des variables d'environnement pour définir les paramètres de mes chaînes de connexion au moment de l'exécution.Variables d'environnement du catalogue SSIS

J'ai essayé de suivre some guides online. Donc, je définissais le paramètre dans le package:

enter image description here

maintenant au problème:
Le guide fonctionne, le seul problème est que chaque fois qu'un paquet est exécuté, je dois choisir manuellement le dossier de l'environnement, je veux à utiliser, même si je l'ai déjà fait dans le paquet.

enter image description here

SSIS ne prétend pas savoir quel environnement à utiliser (même si un seul existe)

Comment puis-je remplacer ce?

J'ai vu que je peux utiliser un Job planifié, et lui dire quel environnement utiliser, mais ce n'est pas utile pour moi puisque j'exécute mon paquet via un service et une procédure. J'ai besoin d'un moyen de lui dire quel environnement choisir.

Répondre

1

Vous ne pouvez pas définir un environnement pour de bon - l'idée pour les environnements est que vous choisissiez celui que vous voulez utiliser pendant l'exécution. Comme vous l'avez souligné, vous pouvez le faire dans un emploi. Cela signifie-t-il que les emplois d'agents ont des pouvoirs super-naturels? Non. Si vous scripter un travail avec une étape qui exécute un package référencement d'un environnement, vous verrez une commande dtexec familière, par exemple:

/ISSERVER "\"\SSISDB\test\test1\Incremental.dtsx\"" /SERVER "\"DESKTOP-NT4K1HQ\"" 
/ENVREFERENCE 1 /Par "\"$ServerOption::LOGGING_LEVEL(Int16)\"";1 
/Par "\"$ServerOption::SYNCHRONIZED(Boolean)\"";True /CALLERINFO SQLAGENT /REPORTING E 

Ce que je voudrais souligner ici est le paramètre /de ENVREFERENCE 1 - Voici comment le travail de l'agent sait quel environnement choisir. Donc, la réponse à votre question est que vous devez toujours choisir un environnement lors de l'exécution d'un paquet (bien sûr si vous voulez en utiliser un). Dans le cas d'une procédure de catalogue que vous feriez quelque chose comme (par this article):

EXEC [SSISDB].[catalog].[create_execution] @package_name=N'Child1.dtsx', @[email protected]_id OUTPUT, @folder_name=N'TestDeply4', @project_name=N'Integration Services Project1', 
@use32bitruntime=False, 
@reference_id=1 

@reference_id = 1 est votre référence de l'environnement. Pour trouver l'ID de votre environnement, vous devez interroger la vue [SSISDB].[catalog].[environments]. Est-ce que j'ai répondu à votre question ou est-ce que vous exécutez vos paquets différemment? Si vous êtes sûr que vous n'aurez jamais besoin de plus d'un environnement, cela signifierait que vous n'avez pas du tout besoin de variables d'environnement.

+0

Merci pour la réponse. Je devrai utiliser plus d'un environnement (DEV, QA, PROD ..). Mon problème est que j'exécute le paquet comme ceci -> J'ai un service Web, qui envoie des paramètres à un SP dans la DB, qui exécute le paquet avec 'start_execution', qui jette une erreur que je n'ai pas fournie valeur à ce paramètre. Mon intention était d'utiliser les variables d'environnement pour les chaînes de connexions afin qu'il puisse facilement être codé en dur et modifié si nécessaire. Ai-je besoin de le changer peut-être pour dépendre d'une table dans la base de données? – sagi

+0

Les variables d'environnement sont un bon moyen d'obtenir ce dont vous avez besoin, mais vous devez toujours pouvoir déterminer le contexte lors de la création de l'exécution (vous devez le faire avant d'appeler start_execution). Je dirais que vous pouvez passer un ID d'environnement via un paramètre de votre service Web à la procédure stockée ou créer une table de configuration dans laquelle vous stockez les ID ou les noms d'environnement. – PacoDePaco

+0

Une autre idée: établissez l'environnement dont vous avez besoin en leur attribuant des noms qui correspondent à votre nom de base de données/serveur (dépend de la façon dont vous séparez vos environnements). Puis, en interrogeant la vue [SSISDB]. [Catalogue]. [Environnements], vous pouvez extraire l'ID d'environnement à l'aide du nom db/server. – PacoDePaco