我在另一个定义的数据库中有一个表的同义词 使用
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
效果很好。
知道我为此工作缺少什么吗?
答案 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.
引用。它们很重要,应该 始终 。
请阅读: