SQL 服务器 : Stored proc can execute well but at the end error "Cannot find the object"

标签 sql sql-server

全部:

关于我遇到的问题,我已经搜索了几个小时。 Google 和此处也有类似的问题,但没有一个是相同的。

我有一个简单的存储过程 A,EXECUTE 权限已正确授予我的登录名。它基本上用数据填充一些表。它与我的登录用户处于相同的架构中。我可以成功执行它,这意味着所有数据都按预期填充。然而,在执行结束时,消息窗口显示:

消息 15151,级别 16,状态 1,过程 A,第 xxx 行 找不到对象“A”,因为它不存在或您没有权限。

行号指向 SP 定义的结尾。我不知道为什么会出现此错误消息,而 SP 在执行结果方面似乎完全没有问题。

编辑:

SP代码如下:

IF EXISTS (SELECT * FROM SysObjects WHERE id = OBJECT_ID('dbo.spA') AND type = 'P')
    DROP PROCEDURE dbo.spA
GO

CREATE PROCEDURE dbo.spA
    @ReportCCY as char(3) = 'GBP',
    @Date as date = null                  /* for regression testing */
AS
BEGIN

    if (@Date is null)
        select @Date = convert(varchar(20), max(VDate), 112) from JB H (nolock)

    declare @dbname as varchar(50)
    select @dbname = DB_NAME()
    exec DBA_admin.App.p_usr_Truncate @DB=@dbname, @Schema='dbo', @Table='ATable'

    insert into dbo.ATable
    select r.Value, I.id
    from Rates r
    join Inst I (nolock) on I.idCCyBase = r.idHold and r.ccyinto = @ReportCcy and r.dtDate = @Date
END

GRANT EXECUTE ON dbo.spA TO UserGrp
GO

最佳答案

您在“END”之后忘记了“GO”。现在“GRANT EXECUTE”是您程序的一部分。

关于SQL 服务器 : Stored proc can execute well but at the end error "Cannot find the object",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13688450/

相关文章:

mysql - 如何获取表格中所有正值的最小值?

sql-server - 使用 INSERT 查询,其中一列来自另一表

sql - 在 REPLACE 函数中使用列值作为字符串模式

sql - 如何在 SQL 中删除多行,其中 id = (x to y)

java - PostgreSQL 和 JDBC : Is `UPDATE table ... RETURNING ... INTO` supported?

php - 在 UNIX 时间中选择特定日期的行

sql-server - T-SQL:我可以在一个 View 中查询值,然后在第二个 View 中仅查询第一个 View 中不存在的值吗?

sql - 甲骨文 : renaming a key in a json field by oracle

sql-server - Datetime BETWEEN 语句在 SQL Server 中不起作用

sql-server - 无法删除 Amazon RDS SQL Server 数据库