2010-01-05 122 views
19

我有一個SQL任務需要運行一個簡單的更新來更新單個行。SSIS SQL任務 - 「參數名稱無法識別」

我已經設置的SQLStatement到:

update agency set AgencyLastBatchSeqNo = ? where agencyID = ? 

在我放棄設置參數0和參數1,我知道包含正確值的變量參數映射頁。我也正確設置了參數名稱值。

在數據庫中,列AgencyLastBatchSeqNo是int,AgencyID是一個很大的INT。有沒有人有引用來查找SSIS中數據類型映射到的內容?我已經在SHORT中猜測了int和int。

當我跑我得到以下錯誤的任務:

[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.

任何人都可以請有什麼建議可能是錯的?

謝謝

Rob。

回答

59

這個問題的答案是改變參數映射屏幕的參數名稱值。

給出下面的查詢

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

假設我的參數是一個名爲User整型變量:: Farm_id
選擇的參數映射屏幕

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

最初的參數名稱下面的值將是「NewParameterName」。只需將其更改爲您的可變標記的順序位置(「?」)

+2

+1救了我!非常感謝! – Legend 2011-10-16 07:26:46

+0

謝謝John,你的回答很好,:) – 2013-02-20 07:39:13

+0

我把參數的名字放在Parameter Name(shock horror)中,並且把我的頭髮撕掉了! – jhowe 2013-11-12 14:18:34

0

確保您引用你的價值觀,那你沒有在列名的拼寫錯誤。

1

SSIS data types

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

你沒有提到的一件事是你的連接類型。我假設你沒有使用ADO.Net,因爲在這種情況下參數標記不是?對於其他類型的連接,參數命名如下:
ADO(不是ADO.Net)連接:參數名稱爲參數1,參數2 ...
ODBC連接:參數名稱爲1,2,3 ... OLEDB連接:參數名稱0,1,2 ...

對於變量類型(它們是不是在SSIS的任何其他方面的參數映射部分不同)我通常長使用詮釋的,我通常離開長度設置爲-1。我相信一個Long將會對Int和Bigint都有效。

2

如果使用超過1點的參數,然後在執行SQL任務窗口去參數映射和參數名設置爲0,1,2 ,3 ....取決於參數的數量和參數大小,以-1 .. 這必須有助於解決您的問題。

0

定義參數映射時,參數名稱後的任何尾隨空白也會導致此消息。