web-dev-qa-db-fra.com

Comment passer un paramètre dans ADO.NET Source SSIS

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

21
CMinor

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:

  • dans votre package, entrez votre tâche de flux de données avec les composants source/destination
  • cliquez n'importe où sur l'arrière-plan pour afficher les propriétés de la tâche dans le panneau Propriétés
  • dans le panneau de propriétés, recherchez la propriété Expressions, qui peut configurer diverses propriétés de source/destination de données et l'ouvrir à l'aide du bouton Ellipsis (...)
  • sous Propriété, sélectionnez la propriété Commande SQL de votre source (par exemple, [Source ADO.NET]. [SqlCommand]) pour ajouter une ligne.
  • cliquez sur le bouton Ellipsis de la ligne pour ouvrir Expression Builder
  • construire votre requête dynamique dans le générateur d'expression

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

35

[ADO.NET EN TANT QUE SOLUTION DE TYPE SOURCE]

Étape 1 Créez des variables pour chaque paramètre que vous souhaitez utiliser.

 enter image description here

É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 "...".

 enter image description here

Étape 4 Sélectionnez la propriété de la commande et cliquez sur le bouton "..."  enter image description here

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!

2
Kay Tsar

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.

1
DaImTo

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.

enter image description here

Créez ensuite une variable et ajoutez une expression:

enter image description here

enter image description here

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.

enter image description here

0
TsSkTo