从另一个db调用的一个db中的SQL存储过程。背景是什么?

时间:2012-08-31 13:06:23

标签: sql sql-server

这是在另一个数据库的上下文中从一个数据库调用存储过程时与上下文相关的问题。

说我在MainDB创建了一个程序:

USE MainDB;
GO

CREATE PROCEDURE dbo.sp_mainproc
    @Login   nvarchar(50),
    @Error   INT               OUTPUT
AS
BEGIN
    -- many details left out...

    -- Login as string must be captured in the xUser table to get
    -- the personal settings for the user...

    SET @_user_id = ( SELECT dbo.xUser.user_id
                      FROM dbo.xUser
                      WHERE dbo.xUser.login = @Login );

    IF( @_user_id IS NULL )
    BEGIN
        -- The user with the given @Login is not present. Indicate the failure.
        SET @Error = 2
        RETURN (1)
    END

    -- Do something in the MainDB. Here the main reason for calling
    -- the stored procedure is implemented.

    -- Indicate the success when finishing.
    SET @Error = 0
    RETURN (0)
END
GO

现在,我想从AuxDB

中的另一个程序调用该过程
USE AuxDB;
GO

CREATE PROCEDURE dbo.sp_action
AS
BEGIN
    -- Call the MainDB.dbo.sp_mainproc to do the action in the MainDB.
    -- The login name must be passed, and possible error must be checked.

    DECLARE @error   INT
    DECLARE @retcode INT

    EXEC @retcode = MainDB.dbo.sp_mainproc
                                  N'the_user',
                                  @error OUTPUT

    IF (@retcode <> 0)
    BEGIN
        -- Here the error must be signalized.
        RETURN 1
    END

    -- Everything OK, let's continue...

    RETURN 0
END
GO

我的问题是:从MainDB.dbo.sp_mainproc内调用AuxDB.dbo.sp_action时,会搜索dbo.xUser中使用的sp_mainproc表格。考虑了MainDB.dbo.xUser,还是搜索了AuxDB.dbo.xUser

谢谢,   彼得

1 个答案:

答案 0 :(得分:5)

Procs已编译,因此它将引用dbo.sp_mainproc所在的同一数据库中的对象,因为在创建proc时,它仅引用dbo.xUser,而不是MainDB.dbo.sp_mainproc数据库名称部分

(即MainDB.dbo.xUser将使用{{1}},无论从哪个数据库调用proc。)