2013-07-22 299 views
5

我試圖調用一個簡單的存儲過程,它將以普通測試格式返回一個名稱列表,全部在一行中。我向它傳遞了兩個參數,但不管我如何在OLE DB源編輯器內或在執行SQL任務內設置調用。 必須有一些我失蹤與我的SQL語句B/C我不斷收到錯誤。SSIS存儲過程調用

我的SQL命令文本是

EXEC [dbo].[spGetEmployerIdCSV] ?, ? 

我傳遞的參數列,正是因爲他們在存儲過程中聲明,@IDType@IDNumber,其分別對應的預定義變量。

每次我試圖從任一任務類型運行它,我得到一個

的EXEC SQL構造或不支持的語句。

在SSIS中運行存儲過程的最佳方式是什麼?

謝謝。

+0

你做了參數映射嗎?按照這個http://www.sqlis.com/post/The-Execute-SQL-Task.aspx – JonH

+0

哪個版本的SSIS? – HLGEM

+0

這是2012年。我發現問題是導入一個varchar(最大) – Paynetech

回答

6

我無法重現您的問題。

我創建了一個proc已存在的控制流。

control flow

我有我的執行SQL任務配置爲

exec sql task

我的參數標籤顯示

parameter mapping

當我點擊運行,包走向綠色。

我最初的假設是,您已經發出信號表示您正在使用存儲過程並且錯誤地提供了EXEC部分。我已經做了類似的SSRS,但即使通過表達式更新IsQueryStoredProcedure爲True,我無法重新生成您的錯誤消息。

如果您在執行其他任務/不同/除了我在執行SQL任務中顯示的內容,您是否可以修改您的問題以描述過程應顯示的所有功能。

+0

謝謝billinkc。我非常感謝你的幫助。我發現問題是,我試圖最初將varchar(max)導入到我的變量中,然後將其傳遞到sproc中。我發現顯然SSIS和(最大)長度設置根本不能很好地協同工作。它導致我的整個數據導入失敗,因此不允許其餘數據流動。一旦我努力設置長度,它工作得很好,使用您的存儲過程查詢幫助。再次感謝你! – Paynetech

+0

是的,這會導致問題,因爲SSIS有它自己的數據類型。可能使用了DT_STR,它是一個以NULL結尾的ANSI/MBCS字符串,最大長度爲8000個字符。 (如果列值包含額外的空終止符,則該字符串將在第一個空值出現時被截斷。)SQL Server varchar(max)最多存儲2 147 483 647(2GB) - 相當多! – Thronk

2

您是否指定了輸出參數? 對於2/1你的SQL代碼如下:

EXEC [dbo].[spGetEmployerIdCSV] ?, ?, ? OUTPUT 

的ResultSet必須設置爲none!

+1

這似乎也不工作。是在執行SQL任務中使用的答案示例,還是在數據流任務/ OLE DB源編輯器中使用的答案示例?如果我在源代碼編輯器中這樣設置它,它只是拒絕再採用任何參數。如果來自SQL Task中,它指出「不支持EXEC SQL構造或語句」。 – Paynetech

-3

使用相同的命令,你用它來運行存儲過程在MySQL工作臺

調用();

使用此命令在執行SQL任務

+0

這不是標記爲MySQL – Hituptony

1

我有同樣的問題。

當您執行任務時,請選中「進度」選項卡;這會給你一個「完全成熟」的錯誤細節。

在我的情況下,我沒有將我在SQL任務中創建的參數映射到存儲過程中的實際參數。

因此,雙擊SQL Task,點擊左側的參數映射,然後創建參數及其各自的映射。這裏是截圖(版本2012):

enter image description here