我有一个表,其中包含与每个元组关联的一列存储过程。我有一个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]作为参数
有办法做到这一点吗?
答案 0 :(得分:1)
将“EXEC”添加到@ProcedureName
的值中,以使该值变为“EXEC dbo.TestProcedure”,并在执行SQL任务中,为SQLSourceType选择“变量”选项并使用{{1}变量作为源。
答案 1 :(得分:1)
Exec
支持变量中的过程名称。如果省略括号,则解释它的方式。
如果您将SQL更改为
DECLARE @Proc NVARCHAR(250) = ?
EXEC @Proc
它应该可以正常工作并且不需要SQL注入。