3

全て:

発生した問題について、数時間検索しました。Google と here に同様の質問がありますが、同じものはありません。

単純なストアド プロシージャ 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
4

1 に答える 1

5

'END' の後に 'GO' を入れ忘れました。これで、'GRANT EXECUTE' がプロシージャの一部になりました。

于 2012-12-03T17:50:15.073 に答える