Bonjour, j'ai besoin d'aide. Ce sera mon premier package SSIS et j'apprends au fur et à mesure. Jusqu'à présent, c'est ce que j'ai.
J'ai créé un flux de contrôle. Ensuite, j'ai créé trois connexions ADO.Net, deux pour la source et une pour la destination. Ensuite, j'ai créé des tâches de flux de données qui copient les données d'une table d'une base de données dans une table correspondante d'une autre base de données sur le même serveur. la tâche de flux de données a une destination NET 2 ADO et une destination ADO NET. La destination mappe simplement les champs ensemble.
Ok, jusqu'ici tout va bien. C'est mon problème. Certaines requêtes source ont des critères de date. Un exemple serait:
SELECT --Code Here
WHERE CONVERT(varchar, call_date, 112) BETWEEN '6/1/2013' AND '7/1/2013'
Je veux remplacer ces dates codées en dur par des variables. Quelque chose comme:
WHERE CONVERT(varchar, call_date, 112) BETWEEN STARTDATE AND ENDATE
J'ai lu plusieurs articles et essayé de faire ce qui est décrit, mais cela ne s'enfonce pas. Utilisez donc mon exemple pour me dire comment faire. Ce serait bien si je pouvais avoir le paquet Me demander la date à laquelle je l’exécutais, mais je serais très heureux d’apprendre à passer une variable dans la requête.
C’est la seule solution que je connaisse car j’ai juste un débutant ici dans le paquet SSIS J'espère que quelqu'un pourra m'aider
Comme aucune des réponses ici ne répond réellement à la question (faites attention à la source ADO.NET, pas OLE DB!), Voici la vraie réponse.
Dans SSIS, vous ne pouvez pas paramétrer une source ADO.NET. Vous devez utiliser une solution de contournement.
Heureusement, il existe peu de solutions de contournement. On pourrait créer un composant de script qui agit comme une source et le code. Cependant, on ne peut pas toujours convertir facilement la ressource existante en script, surtout quand il manque de connaissances en programmation ADO.NET.
Il existe une autre solution de contournement, à savoir la création de la requête SQL avant que la source ADO.NET prenne des mesures. Cependant, lorsque vous ouvrez une source ADO.NET, vous remarquerez que le mode d'accès aux données n'autorise pas les entrées variables. Alors, comment procédez-vous?
Vous souhaitez définir de manière dynamique l'expression SQL du source ADO.NET. Vous devez donc indiquer à votre tâche de flux de données de configurer le composant source SSIS ADO.NET à l'aide de l'expression.
Pour que la longue histoire soit courte (ou pas si courte :), procédez comme suit:
La dernière étape peut être un peu lourde pour le paramètre date/date/heure. Cependant, voici l'exemple, pour votre commodité:
"SELECT * FROM YOUR_SOURCE_TABLE WHERE your_date_column = '" +
(DT_WSTR,4)YEAR(@[User::VAR_CONTAINING_DATE]) + "-" +
(DT_WSTR,2)MONTH(@[User::VAR_CONTAINING_DATE]) + "-" +
(DT_WSTR,2)DAY(@[User::VAR_CONTAINING_DATE]) + "'"
HTH
[ADO.NET EN TANT QUE SOLUTION DE TYPE SOURCE]
Étape 1 Créez des variables pour chaque paramètre que vous souhaitez utiliser.
Étape 2 Sélectionnez la tâche sous l'onglet Flux de contrôle qui exécute la requête.
Étape 3 Accédez aux propriétés de cette tâche pour sélectionner les expressions en cliquant sur le bouton "...".
Étape 4 Sélectionnez la propriété de la commande et cliquez sur le bouton "..."
Step 5 Maintenant, vous pouvez construire votre requête ici en incluant les variables que vous avez définies à l'étape 1. Enregistrez ensuite. Prendre plaisir!
Ok voici comment je le fais.
Sur votre flux de contrôle, créez une tâche d'exécution SQL. Configurez la connexion à la base de données. Dans SQLStatment, faites quelque chose comme.
select getdate() -1 startDate , getdate() endDate
Définissez ResultSet dans l'onglet Général sur Ligne unique. Allez à l'onglet Jeu de résultats, cliquez sur Ajouter, donnez un nom de résultat comme StartDate, puis ajoutez une nouvelle variable.
Name: startDate (must be the same name as the alius in the select)
Namespace: user
type: DateTime
Value: 02-09-2013
Maintenant, lorsque cela fonctionne, il doit renseigner une variable utilisateur avec la date actuelle et la date d'hier. Faites la même chose depuis EndDate
Créez votre deuxième tâche d'exécution SQL Associez-la à la première. Ajoutez cette déclaration SQL. ? seront vos variables
select stuff
WHERE CONVERT(varchar, call_date, 112) BETWEEN ? AND ?
Aller à la cartographie des paramètres . Ajouter un
Variable Name should be something like User::StartDate
Direction Input
Datetype: Nvarchar
Parameter name: 0
Parameter size: 0
ajouter le second
Variable Name should be something like User::EndDate
Direction Input
Datetype: Nvarchar
Parameter name: 1
Parameter size: 0
Lorsque vous ajoutez un troisième, ajoutez simplement le nom du paramètre 2 ...
Exécuter.
Voici le OLE DB Apporach:
Créez des paramètres pour votre paquet. Si vous les rendez obligatoires, ils le sont, eh bien, ils sont obligatoires et votre package ne fonctionnera pas sans certaines valeurs. Le champ dans la colonne Valeur sera la valeur par défaut et sera utilisé pour le débogage.
Créez ensuite une variable et ajoutez une expression:
L'éditeur Expressions utilise une version délavée de C # (si vous étiez curieux)
Aussi Assurez-vous d'ajouter des espaces dans votre chaîne entre les variables C'est difficile à voir mais AND a un espace de chaque côté, comme ceci:
" ET "
J'ai presque oublié. Les valeurs pour vos paramètres doivent être en 'singleQuotes'. Cela peut être fait de deux manières: Vous pouvez inclure les guillemets lorsque vous attribuez une valeur à la chaîne ou ajouter des guillemets dans l'expression (ce que je fais habituellement).
Les ajouter à l'expression ressemblerait à ceci:
"some stuff " + "'" + @[variable] + "'"
Cliquez sur évaluer l'expression pour voir si votre variable contient la chaîne correcte.
La dernière étape consiste à ajouter une source de base de données OLE, à configurer la connexion (si vous n'en avez pas encore) et à ajouter la requête à partir de variable.