2017-10-18 11 views
1

Je suis nouveau à SSIS. J'ai un paquet de SSIS qui importe une table d'un SQL Server différent au mien. J'ai créé le paquet en utilisant l'assistant d'importation, mais je comprends comment ouvrir et modifier en utilisant VisualStudio. Le package de base supprime d'abord la table d'origine, crée la nouvelle table puis importe les données. Je fais ça tous les jours.SSIS importer conditionnellement si la source est disponible

Mon problème est parfois l'autre base de données n'est pas disponible. Je ne sais pas qu'il y a un problème jusqu'à la chute de la table. J'ai besoin de savoir s'il y a un moyen simple (assez pour moi) de vérifier la disponibilité de l'autre table avant de laisser tomber ma copie actuelle. De cette façon, je conserve mes données les plus récentes si les nouvelles données ne sont pas disponibles.

Je pensais pouvoir importer dans une table temporaire, puis vérifier le nombre de lignes et si 0 s'arrêter là. Ou d'une manière ou d'une autre, vérifiez d'abord l'autre serveur avant de le laisser tomber, mais je ne sais pas non plus comment faire. Reconnaissant pour certains pointeurs.

Modifier: Besoin d'aide pour trouver comment le faire dans SSIS ainsi que comment le faire en général.

+0

Copie possible de [vérifier si la base de données existe ET la connexion actuelle peut accéder] (https://stackoverflow.com/questions/19553515/check-if-database-exists-and-current-login-can-access) – Tanner

+1

lire ceci: https://docs.microsoft.com/en-us/sql/t-sql/functions/has-dbaccess-transact-sql vous pouvez ajouter que dans ssis, prenez la valeur qu'il retourne et continuez s'il est en ligne d'autre échouer en toute sécurité. – Tanner

+0

Merci Tanner. C'est le détail sur cette partie que je suis flou: "prendre la valeur qu'il retourne et ensuite continuer s'il est en ligne d'autre échouer en toute sécurité". Je comprends de la réponse de Kyle si elle échoue (renvoie 1?) Alors le paquet s'arrêtera là. – shorton

Répondre

3

Ceci est assez facile à accomplir. Vous devez vérifier les autres tables de base de données avant de dropper est une commande simple et ici qui est:

Pulled la requête de here

Tableau permanent

IF OBJECT_ID('dbo.Scores', 'U') IS NOT NULL DROP TABLE dbo.Scores;

Table temporaire

IF OBJECT_ID('tempdb.dbo.#T', 'U') IS NOT NULL DROP TABLE #T;

Cela vous permettra de supprimer si l'autre existe.

+0

Merci. Cela aide, mais 2 suivi: 1) Comment formater le nom de la base de données à l'autre serveur? et 2) comment puis-je construire cela dans le paquet SSIS? Vous ne savez pas comment faire un If dans le package SSIS et ne passez pas à l'étape suivante. Je sais comment ajouter une instruction SQL et l'attacher à la tâche suivante. – shorton

+0

@shorton avez-vous vérifié le lien que je vous ai envoyé sur la question? – Tanner

+0

En ce moment, j'ai une "tâche SQL d'exécution" où la table est supprimée, puis une "tâche SQL de préparation" où la nouvelle table est créée, puis la "tâche de flux de données" qui effectue l'importation. Dans la boîte à outils SSIS, je ne sais pas quoi choisir pour permettre à une branche de s'arrêter. – shorton