Sql 创建视图在另一个数据库上找不到表的对象名称

Sql 创建视图在另一个数据库上找不到表的对象名称,sql,sql-server,view,sql-server-2008-r2,schema,Sql,Sql Server,View,Sql Server 2008 R2,Schema,我有2个SQLServer2008R2数据库。一个数据库A在测试模式中有一个表Foo。我正在尝试在数据库B上创建一个引用a.testing.Foo的视图。但是,这样做时会出现错误。以下是登录到数据库B时执行的查询 -- fails with Invalid object name 'A..Foo' CREATE VIEW testing.Bar AS (SELECT * FROM A..Foo) -- however, this succeeds when issued in the same

我有2个SQLServer2008R2数据库。一个数据库A在测试模式中有一个表Foo。我正在尝试在数据库B上创建一个引用a.testing.Foo的视图。但是,这样做时会出现错误。以下是登录到数据库B时执行的查询

-- fails with Invalid object name 'A..Foo'
CREATE VIEW testing.Bar
AS
(SELECT * FROM A..Foo)

-- however, this succeeds when issued in the same context (same SSMS tab)
SELECT * FROM A..Foo

-- also, on both A and B
SELECT SCHEMA_NAME() -- returns 'testing'

-- also, this works
CREATE VIEW testing.Bar
AS
(SELECT * FROM A.testing.Foo)

奇怪的是,这适用于其他数据库对,只是不适用于A和B。因此,我假设一定存在一些配置问题,但我不知道在哪里可以找到!是什么导致了这种行为。

可能是命名冲突,正如有人已经说过的,但我建议在您开始跨越DB边界时使用3个部件名称,只是为了清楚起见

ex: [Database].[schema].[tableName]
这样,你身后的人,或者两周后的你,就会知道发生了什么。如果您跨越数据库服务器边界的速度较慢,并且增加了全新的复杂性,只需使用由4部分组成的名称创建链接服务器即可

ex: [LinkedServerName].[Database].[schema].[tableName]

这可能是因为默认模式是A上的dbo。还要看看您收到了什么错误?