web-dev-qa-db-fra.com

Comment passer une variable en tant que paramètre dans Execute SQL Task SSIS?

J'ai un paquet ssis dans lequel je prends les valeurs d'un fichier plat et je l'insère dans un tableau.

J'ai pris une tâche d'exécution SQL dans la création d'une tentation

CREATE TABLE [tempdb].dbo.##temptable 
(
date datetime,
companyname nvarchar(50),
price decimal(10,0),
PortfolioId int,
stype nvarchar(50)
)

Insert into [tempdb].dbo.##temptable (date,companyname,price,PortfolioId,stype) 
SELECT   date,companyname,price,PortfolioId,stype
FROM        ProgressNAV
WHERE     (Date = '2011-09-30') AND (PortfolioId = 5) AND (stype in ('Index'))
ORDER BY CompanyName

Maintenant, dans la requête ci-dessus, je dois passer (Date = '2011-09-30') AND (PortfolioId = 5) AND (stype in ('Index')) _ ces 3 paramètres en utilisant nom de variable J'ai créé des variables dans un package afin de devenir dynamique.

48
Neo

Dans votre tâche d'exécution SQL, assurez-vous que SQLSourceType est défini sur Entrée directe, puis votre instruction SQL correspond au nom du proc stocké, avec des points d'interrogation pour chaque paramètre du proc, comme suit:

enter image description here

Cliquez sur le mappage de paramètre dans la colonne de gauche et ajoutez chaque paramètre de votre proc stockée et mappez-le sur votre variable SSIS:

enter image description here

Maintenant, lorsque cette tâche sera exécutée, les variables SSIS seront transmises au proc stocké.

91
PaulStock

Les gestionnaires de connexions Excel et OLED DB utilisent les noms de paramètre 0 et 1.

J'utilisais une connexion oledb et perdais quelques heures à essayer de comprendre la raison pour laquelle la requête ne fonctionnait pas ou à prendre les paramètres. L'explication ci-dessus a beaucoup aidé Merci beaucoup.

18
user2907295

Avec la réponse de @ PaulStock, en fonction de votre type de connexion, de vos noms de variable et des modifications de SQLStatement/SQLStatementSource

https://docs.Microsoft.com/en-us/sql/integration-services/control-flow/execute-sql-taskhttps://docs.Microsoft.com/en-us/sql/integration-services/control-flow/execute-sql-task

7
Sam

Les commandes SELECT, INSERT, UPDATE et DELETE incluent fréquemment des clauses WHERE pour spécifier des filtres définissant les conditions que chaque ligne des tables source doit remplir pour être qualifiée pour une commande SQL. Les paramètres fournissent les valeurs de filtre dans les clauses WHERE.

Vous pouvez utiliser des marqueurs de paramètre pour fournir de manière dynamique des valeurs de paramètre. Les règles pour lesquelles les marqueurs de paramètre et les noms de paramètre peuvent être utilisés dans l'instruction SQL dépendent du type de gestionnaire de connexions utilisé par Execute SQL.

Le tableau suivant répertorie des exemples de commande SELECT par type de gestionnaire de connexion. Les instructions INSERT, UPDATE et DELETE sont similaires. Les exemples utilisent SELECT pour renvoyer des produits de la table Product dans AdventureWorks2012 ayant un ProductID supérieur et inférieur aux valeurs spécifiées par deux paramètres.

Excel, ODBC et OLEDB

SELECT* FROM Production.Product WHERE ProductId > ? AND ProductID < ?

ADO

SELECT * FROM Production.Product WHERE ProductId > ? AND ProductID < ?

ADO.NET

SELECT* FROM Production.Product WHERE ProductId > @parmMinProductID 
     AND ProductID < @parmMaxProductID

Les exemples nécessiteraient des paramètres portant les noms suivants: Les gestionnaires de connexions Excel et OLED DB utilisent les noms de paramètres 0 et 1. Le type de connexion ODBC utilise 1 et 2. Le type de connexion ADO peut utiliser deux noms de paramètre, tels que Param1 et Param2, mais les paramètres doivent être mappés par leur position ordinale dans la liste de paramètres. Le type de connexion ADO.NET utilise les noms de paramètre @parmMinProductID et @parmMaxProductID.

4
Teju MB

Un peu tard pour la fête, mais voici comment je l'ai fait pour un insert:

DECLARE @ManagerID AS Varchar (25) = 'NA'
DECLARE @ManagerEmail AS Varchar (50) = 'NA'
Declare @RecordCount AS int = 0

SET @ManagerID = ?
SET @ManagerEmail = ?
SET @RecordCount = ?

INSERT INTO...
3
Steve L