【问题标题】:Mssql: Executing store procedure where the name gets from another spSql 女士:执行名称来自另一个 sp 的存储过程
【发布时间】:2013-02-26 21:55:51
【问题描述】:

我在 mssql 中遇到了存储过程 (SP) 的问题。我有一张表,其中一列包含一个 SP 名称,我要做的是获取该 SP 名称并在我的 SP 中执行该 SP。

所以我做了什么:

  1. 我有一个 SP - 好的
  2. 用 SP 的名称声明一个变量,该变量将获取表中的 SP 名称和 SP - 好的

.

DECLARE @rs varchar(max)
DECLARE @sql varchar(max) = N'usp_GetSP)'
EXECUTE sp_executesql @sql, @rs output
EXECUTE @rs

这里我知道当我执行 EXECUTE sp_executesql @sql 时我得到了 SP 名称,但我不确定 @rs。我收到此错误:

消息 214,级别 16,状态 2,过程 sp_executesql,第 1 行过程 需要类型为“ntext/nchar/nvarchar”的参数“@statement”。消息 2812,级别 16,状态 62,第 4 行找不到存储过程 ''。

  1. 执行我返回的那个 SP - 这就是问题所在

这是一个具有三个 SELECTstatements 和 UNIONthem 的 SP,这个 SP 是我开始工作需要的第三个 UNION(最后一个 SELECT 语句)。

有人知道我该怎么做吗?

【问题讨论】:

    标签: sql-server stored-procedures


    【解决方案1】:

    For Error Message: 我认为您应该将 @sql 声明为 nvarchar 而不是 varchar;

    在您的情况下,您分配的 nvarchar 值 (N'usp_GetSP') 将转换为 varchar,因为您已将 @sql 定义为 varchar 类型。

    DECLARE @rs nvarchar(max)
    DECLARE @sql nvarchar(max) = N'usp_GetSP' --not sure why you have ')'
    EXECUTE sp_executesql @sql, @rs output
    EXECUTE ( @rs )
    

    还有check this link 了解如何将OUTPUT 参数与sp_exeutesql 一起使用

    【讨论】:

    • 感谢您的回答。而且')'不应该在那里,它不在我的代码中......
    猜你喜欢
    • 2013-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多