web-dev-qa-db-fra.com

Tâche SQL SSIS - "Le nom du paramètre n'est pas reconnu"

J'ai une tâche SQL qui doit exécuter une mise à jour simple pour mettre à jour une seule ligne.

J'ai défini le SQLStatement à: 

update agency set AgencyLastBatchSeqNo = ? where agencyID = ?

Sur la page Parameter Mapping (Mappage de paramètres), j'ai défini les paramètres 0 et 1 avec des variables que je connais contiennent les bonnes valeurs. J'ai également défini correctement les valeurs du nom du paramètre.

Dans la base de données, la colonne AgencyLastBatchSeqNo est un entier, AgencyID est un gros int. Quelqu'un at-il une référence pour trouver à quoi correspondent les types de données dans SSIS? J'ai deviné à court pour l'int et long pour le grand int.

Lorsque j'exécute la tâche, l'erreur suivante apparaît:

[Execute SQL Task] Erreur: Exécution de la requête "ensemble d'agence de mise à jour AgencyLastBatchSeqNo =? Where AgencyID =?" a échoué avec ce qui suit erreur: "Le nom du paramètre n'est pas reconnu.". Causes d'échec possibles: Problèmes avec la requête, propriété "ResultSet" non définie correctement, les paramètres ne sont pas définis correctement ou la connexion n'est pas établie correctement.

Quelqu'un pourrait-il s'il vous plaît suggérer ce qui peut être le problème?

Merci

Rob.

27
Rob Bowman

La réponse à cela est de changer la valeur du nom du paramètre dans l'écran Parameter Mapping.

Étant donné la requête suivante 

SELECT Id, AnimalName FROM dbo.Farm WHERE Farm_id = ?

En supposant que mon paramètre soit un entier Variable nommée User :: Farm_id
Choisissez les valeurs suivantes sur l’écran Parameter Mapping

Variable Name  -   User::Farm_id
Direction      -   Input
Data Type      -   LONG
Parameter Name -   0
Parameter Size -   -1

À l'origine, le nom du paramètre sera "NewParameterName". Changez simplement ceci en position ordinale de votre marqueur de variable ("?")

75
John DaCosta

Une chose que vous ne mentionnez pas est votre type de connexion. Je suppose que vous n'utilisez pas ADO.Net car le marquage de paramètre dans ce cas n'est pas un?. Pour les autres types de connexion, les paramètres sont nommés comme suit:
Connexion ADO (pas ADO.Net): les noms de paramètre sont Param1, Param2 ...
Connexion ODBC: les noms de paramètre sont 1,2,3 ... Connexion OLEDB: les noms de paramètre sont 0,1,2 ...

Pour les types de variable (ils diffèrent dans la section de mappage des paramètres par rapport à tout autre domaine de SSIS), j'utilise généralement Long pour les Int et je laisse généralement la longueur définie à -1. Je crois qu'un long fonctionnera à la fois pour Int et Bigint. 

3
William Salzman

Si vous utilisez plus d'un paramètre, dans la fenêtre de la tâche Exécuter SQL, accédez au mappage des paramètres et définissez le nom du paramètre sur 0,1,2,3 .... en fonction du nombre de paramètres et la taille du paramètre sur -1. . Cela doit être utile pour résoudre votre problème.

2
Heema

Voir Types de données SSIS.

   int = DT_I4  (4 byte integer) = Int32 variable
bigint = DT_I8  (8 byte integer)  = Int64 variable
1
Damir Sudarevic

Assurez-vous de citer vos valeurs et de ne pas avoir de fautes de frappe dans les noms de colonne.

0
cyberconte

Lors de la définition des mappages de paramètres, tous les espaces vides après le nom du paramètre peuvent également provoquer ce message.

0
Eugene P.