创建视图无法在另一个数据库中找到表的对象名

时间:2013-12-20 16:45:20

标签: sql sql-server view sql-server-2008-r2 schema

我有2个SQLServer 2008 R2数据库。一个数据库(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.因此,我认为必定存在一些配置问题,但我不知道在哪里看!什么可能导致这种行为。

1 个答案:

答案 0 :(得分:0)

可能是某人已经说过的命名冲突,但我建议您在开始跨越数据库边界时使用3个部分名称(仅为了清晰起见)

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

那样,你身后的人,或者你2周后,知道发生了什么事。如果您跨越数据库服务器边界(速度较慢并增加了一个全新的复杂程度),只需使用4部分名称执行链接服务器

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