2017-08-10 154 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注入自由。