【问题标题】:Create view can't find object name of table on another database创建视图在另一个数据库上找不到表的对象名称
【发布时间】:2014-01-09 14:05:15
【问题描述】:

我有 2 个 SQLServer 2008 R2 数据库。一个数据库 (A) 在测试模式中有一个表 Foo。我正在尝试在引用 A.testing.Foo 的数据库 (B) 上创建一个视图。但是,这样做时出现错误。这是查询(登录数据库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。因此,我认为肯定有一些配置问题,但我不知道去哪里找!什么可能导致这种行为。

【问题讨论】:

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


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2019-10-26
    • 1970-01-01
    • 2011-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多