Sql 创建视图在另一个数据库上找不到表的对象名称
我有2个SQLServer2008R2数据库。一个数据库A在测试模式中有一个表Foo。我正在尝试在数据库B上创建一个引用a.testing.Foo的视图。但是,这样做时会出现错误。以下是登录到数据库B时执行的查询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
-- 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。还要看看您收到了什么错误?