2010-01-05 27 views
19

Ich habe eine SQL-Aufgabe, die ein einfaches Update ausführen muss, um eine einzelne Zeile zu aktualisieren.SSIS SQL Task - "Parametername ist nicht erkannt"

Ich habe die SQLStatement auf:

update agency set AgencyLastBatchSeqNo = ? where agencyID = ? 

Auf der Parameter-Mapping Seite I Parameter eingestellt hat 0 und Parameter 1 zu Variablen, die ich kenne, die richtigen Werte enthalten. Ich habe auch die Parameter Name Werte richtig eingestellt.

In der Datenbank ist die Spalte AgencyLastBatchSeqNo ein Int, AgencyID ist ein großer Int. Hat jemand einen Verweis, um zu finden, was die Datentypen in SSIS abbilden? Ich habe SHORT für das int und LONG für das große int erraten.

Wenn ich ausführen, um die Aufgabe, die ich die folgende Fehlermeldung erhalten:

[Execute SQL Task] Error: Executing the query "update agency set AgencyLastBatchSeqNo = ? where AgencyID = ?" failed with the following error: "Parameter name is unrecognized.". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly.

Könnte jemand bitte vorschlagen, was falsch sein kann?

Danke

Rob.

Antwort

59

Die Antwort darauf ist, den Wert Parametername im Bildschirm Parameterzuordnung zu ändern.

Bei der folgenden Abfrage

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

meine Parameter ist folgende Werte auf dem Parameter-Mapping-Bildschirm eine Integer-Variable namens User :: Farm_id
wählen

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

Ursprünglich war der Name Parameter Angenommen wird sei "NewParameterName". Ändern Sie dies einfach in die Ordinalposition Ihrer Variablenmarkierung ("?")

+2

+1 hat mich gerettet! Danke vielmals! – Legend

+0

danke John deine Antwort war Großartig, :) –

+0

Ich stellte den NAME des Parameters in Parametername (Schock Horror) und riss mir die Haare aus! – jhowe

0

Stellen Sie sicher, dass Sie Ihre Werte angeben und dass Sie keine Tippfehler in Ihren Spaltennamen haben.

1

Siehe SSIS data types.

int = DT_I4 (4 byte integer) = Int32 variable 
bigint = DT_I8 (8 byte integer) = Int64 variable 
3

Eine Sache, die Sie nicht erwähnen, ist Ihr Verbindungstyp. Ich nehme an, dass Sie ADO.Net nicht verwenden, da die Parametermarkierung in diesem Fall kein? Ist. Für die anderen Verbindungstypen sind die Parameter wie folgt benannt:
ADO-Verbindung (nicht ADO.Net): Parameternamen sind Param1, Param2 ... ODBC-Verbindung: Parameternamen sind 1,2,3 ... OLEDB-Verbindung: Parameternamen sind 0, 1, 2 ...

Für die Variablentypen (sie unterscheiden sich in der Parameterzuordnung Abschnitt als in jedem anderen Bereich von SSIS) Ich verwende normalerweise Long für Int und ich lasse in der Regel die Länge auf -1 festgelegt. Ich glaube, dass ein Long sowohl für Int's als auch Bigints funktionieren wird.

2

Wenn Sie mehr als einen Parameter verwenden, gehen Sie im Fenster sql-Task ausführen auf Parametermapping und setzen Sie den Parameternamen auf 0,1,2 , 3 .... abhängig von der Anzahl der Parameter und der Parametergröße bis -1 .. Dies muss hilfreich sein, um Ihr Problem zu lösen.

0

Bei der Definition der Parameterzuordnungen können auch nachgestellte Leerzeichen nach dem Parameternamen diese Meldung verursachen.

Verwandte Themen