【问题标题】:How to execute a stored procedure which has its object name stored in a variable如何执行将对象名称存储在变量中的存储过程
【发布时间】:2017-08-10 17:57:24
【问题描述】:

我有一个表,其中包含一列与每个元组关联的存储过程。我有一个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] 作为参数

有没有办法做到这一点?

【问题讨论】:

    标签: sql-server stored-procedures ssis


    【解决方案1】:

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

    【讨论】:

    • 呃!谢谢。我需要添加一个 CASE 语句,因为并非所有条目都是过程,我们有一个用于识别类型的列
    【解决方案2】:

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

    如果您将 SQL 更改为

    DECLARE @Proc NVARCHAR(250) = ?
    
    EXEC @Proc
    

    它应该可以正常工作并且没有 SQL 注入。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-15
      • 1970-01-01
      • 2017-09-07
      • 2014-09-01
      • 1970-01-01
      相关资源
      最近更新 更多