Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何执行对象名存储在变量中的存储过程_Sql Server_Stored Procedures_Ssis - Fatal编程技术网

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

Sql server 如何执行对象名存储在变量中的存储过程,sql-server,stored-procedures,ssis,Sql Server,Stored Procedures,Ssis,我有一个表,其中包含一列与每个元组关联的存储过程。我有一个executesql任务,它为所需的元组选择过程并将其存储在变量中。然后我将其连接到另一个executesql任务,该任务使用语句EXEC?,并将变量映射为参数。但无法执行,显示错误: 在此上下文中无法推断参数“@P1”的类型 这是变量的外观: @[User::ProcedureName] = "dbo.TestProcedure" 获取过程名称的执行SQL任务 SELECT ProcedureName FROM Table WHERE

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

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

这是变量的外观:

@[User::ProcedureName] = "dbo.TestProcedure"
获取过程名称的
执行SQL任务

SELECT ProcedureName FROM Table WHERE ProcedureID = 1
结果输入@[User::ProcedureName]

执行过程的
executesql任务

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


有办法吗?

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

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

如果将SQL更改为

DECLARE @Proc NVARCHAR(250) = ?

EXEC @Proc

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

Duh!谢谢我需要添加一个CASE语句,因为不是所有条目都是过程,我们有一个列用于标识类型