1

我在使用定义的另一个数据库中有一个表的同义词

create synonym TableA for otherDb.dbo.TableA

我有一个本地定义的存储过程

CREATE PROCEDURE dbo.spGetTableA
AS 
BEGIN
SELECT * FROM TableA
END

现在当我打电话给 SP

EXEC spGetTableA

我收到以下错误
Invalid object name 'TableA'

直接调用 SQL 时SELECT * FROM TableA
效果很好。

知道我为此工作缺少什么吗?

4

1 回答 1

3

您可能从默认架构不是 dbo 的用户调用存储过程。因此,在创建同义词和在查询中引用表时,都应该始终引用模式。

DROP SYNONYM TableA;
GO
CREATE SYNONYM dbo.TableA FOR OtherDB.dbo.TableA;
GO
ALTER PROCEDURE dbo.spGetTableA
AS
BEGIN
  SELECT * FROM dbo.TableA;
END
GO
EXEC dbo.spGetTableA;

我希望我可以dbo.在代码中加粗所有这些引用。它们很重要,应该始终存在。

请阅读:

于 2013-01-16T20:41:36.840 回答