在存储过程中使用同义词

时间:2013-01-16 20:35:20

标签: sql sql-server sql-server-2008

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

create synonym TableA for otherDb.dbo.TableA

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

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

现在我打电话给SP

EXEC spGetTableA

我收到以下错误
无效的对象名称'TableA'

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

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

1 个答案:

答案 0 :(得分: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.引用。它们很重要,应该 始终

请阅读: