2017-08-10 153 views
1

我有一個表,其中包含與每個元組關聯的存儲過程列。我有一個Execute SQL Task它爲所需的元組選擇過程並將其存儲在一個變量中。然後,我將它連接到另一個使用語句的Execute SQL Task,並將變量映射爲參數。它未能雖然執行,顯示錯誤:如何執行存儲在變量中的對象名的存儲過程

The type for parameter '@P1' cannot be deduced in this context

這是可變的樣子:

@[User::ProcedureName] = "dbo.TestProcedure" 

Execute SQL Task用於獲取程序名稱

SELECT ProcedureName FROM Table WHERE ProcedureID = 1 

結果爲@ [用戶: :ProcedureName]

Execute SQL Task執行程序

EXEC ? 

隨着@ [用戶:: PROCEDURENAME]作爲參數

有沒有辦法做到這一點?

回答

1

添加「EXEC」成@ProcedureName值,使得該值變爲「EXEC dbo.TestProcedure」,並在您執行SQL任務,選擇SQLSourceType「變量」選項,並使用@ProcedureName變量作爲源。

+0

呃!謝謝。我需要添加CASE語句,因爲並非所有條目都是過程,所以我們有一個用於標識類型的列 – TomNash

1

Exec確實支持變量中的過程名稱。如果你省略了括號,這就是它的解釋方式。

如果你改變你的SQL來

DECLARE @Proc NVARCHAR(250) = ? 

EXEC @Proc 

它應該很好地工作,並SQL注入自由。