2008-12-15 9 views
1

J'ai un package SSIS qui effectue les opérations suivantes: Sélectionne les chaînes de connexion d'une table de serveurs. La chaîne de connexion est soit le nom du serveur avec le domaine (c'est-à-dire Dalin.myhouse.com), soit l'adresse IP directe d'un serveur.Accès aux variables 'Global' dans une tâche ExecuteSQL

Le package parcourt chaque chaîne de connexion et remplit une variable "globale" définie. Cette variable a été créée avec dans le concepteur Variable. Pour chaque chaîne de connexion, le package récupérera des informations sur le serveur. Le problème que j'ai est quand vous ajoutez une adresse IP de serveur à la liste, le «nom amical» peut ne pas être connu à ce moment-là ainsi je voudrais juste l'IP de serveur dans la colonne de chaîne de connexion et le sympathique nom de la colonne de la table. Je veux, après la fin d'une itération, mettre à jour que la colonne Nom convivial de l'entrée de serveur dans cette table afin qu'il ait le nom du serveur tiré du serveur en utilisant SERVERPROPERTY ('Servername')

Pour ce faire, Je voudrais utiliser un ExecuteSQL Tâche avec le code suivant:

UPDATE [myDB].[mySchema].[myServers] 
SET [ServerName] = VarA 
WHERE ConnectionString = VarB 

le code précédent utilise une connexion statique au serveur sur lequel réside la table mes_serveurs. VarA représente la valeur globale que je veux définir le nom de serveur à définir dans une requête SQL distincte à l'aide de SERVERPROPERTY ('Nom de serveur')

Il doit être dans une tâche distincte car il doit se connecter à un serveur en utilisant le même serveur que l'itération en cours.

VarB est défini au début de chaque itération de la chaîne de connexion suivante dans la liste.

J'ai vu des exemples sur la façon d'utiliser ceci pour la tâche de script et les composants de script, mais je voudrais simplement utiliser la tâche ExecuteSQL pour accomplir ceci. Résumé:
Connectez-vous au serveur A et remplissez deux variables globales.
Connectez-vous au serveur B et utilisez les deux variables globales pour mettre à jour une ligne spécifique dans une table.

Des idées?

Répondre

1

Je ne vois pas comment cela peut être accompli sans que les variables soient définies dans une tâche de script, car les tâches ExecuteSQL doivent être définies sur une connexion à une base de données. Les tâches de script fonctionnent pour cela car leur connexion est dans le contexte du serveur qui les exécute. Cela étant dit, vous pouvez utiliser une tâche de script avant cette tâche ExecuteSQL qui définit les variables sur l'instance du serveur local.

Questions connexes