如何执行存储在变量中的对象名称的存储过程

时间:2017-08-10 17:57:24

标签: sql-server stored-procedures ssis

我有一个表,其中包含与每个元组关联的一列存储过程。我有一个Execute SQL Task,它选择所需元组的过程并将其存储在变量中。然后我将其连接到使用语句Execute SQL Task的另一个EXEC ?并将变量映射为参数。但它无法执行,显示错误:

  

参数'@ P1'的类型无法在此上下文中推断

这是变量的外观:

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

获取程序名称的Execute SQL Task

SELECT ProcedureName FROM Table WHERE ProcedureID = 1

结果进入@ [User :: ProcedureName]

执行程序的Execute SQL Task

EXEC ?

使用@ [User :: ProcedureName]作为参数

有办法做到这一点吗?

2 个答案:

答案 0 :(得分:1)

将“EXEC”添加到@ProcedureName的值中,以使该值变为“EXEC dbo.TestProcedure”,并在执行SQL任务中,为SQLSourceType选择“变量”选项并使用{{1}变量作为源。

答案 1 :(得分:1)

Exec支持变量中的过程名称。如果省略括号,则解释它的方式。

如果您将SQL更改为

DECLARE @Proc NVARCHAR(250) = ?

EXEC @Proc

它应该可以正常工作并且不需要SQL注入。