【问题标题】:SQL Server 2008 R2: 'CREATE/ALTER VIEW' does not allow specifying the database name as a prefix to the object nameSQL Server 2008 R2:“CREATE/ALTER VIEW”不允许将数据库名称指定为对象名称的前缀
【发布时间】:2015-09-28 16:50:20
【问题描述】:

我必须有 2 个数据库 DB1DB2

我有一个名为View1 的视图,它存储在数据库DB2 中。现在我想从DB1数据库中ALTER VIEW

我的尝试:

ALTER VIEW DB2..View1 
AS 
   SELECT * FROM DB2..Test;

但我收到一个错误:

'CREATE/ALTER VIEW' 不允许将数据库名称指定为对象名称的前缀

【问题讨论】:

  • 如果视图在DB2,你需要在DB2才能改变它。
  • @marc_s,所以它不可能来自DB1
  • 错误信息似乎告诉你这是不可能的......
  • 你在DB2工作吗?
  • 正如已经指出的那样,错误消息很清楚你不能这样做。为什么在不同数据库的上下文中需要更改视图?只需更改当前连接的上下文并更改视图。

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


【解决方案1】:

真的很简单:你需要改变数据库

USE DB2
GO

ALTER VIEW View1
    ...

【讨论】:

  • 是的!知道了。非常感谢。
  • 如果数据库被参数化,推荐的方法是什么?
【解决方案2】:

评论是不言自明的。您需要在您的视图用于/来自的数据库中工作。将您的连接切换到DB2,您应该能够在CREATEALTER/您的视图中。 From MSDN

【讨论】:

    【解决方案3】:

    在我的例子中,我试图运行一个脚本来创建/更改不同数据库中的视图,所以我使用 EXEC (...) 来创建我的视图。
    但我遇到了一个悖论: EXEC ('CREATE VIEW...') 不会让你指定数据库。您必须切换到该数据库才能创建视图。
    但是你不能做EXEC ('USE [db]; CREATE VIEW...') 因为CREATE VIEW 会要求它是第一个命令。 我解决了这个问题,感觉就像我去了Inception
    EXEC('USE [db]; EXEC('CREATE VIEW'))

    【讨论】:

      【解决方案4】:

      我在 Azure Data Studio 中连接到同一个数据库 server:DB1 我想要查看,并从中得到错误:

      CREATE OR ALTER VIEW DB1.dbo.my_View AS
      SELECT ...
      

      我删除了前缀,这有效:

      CREATE OR ALTER VIEW my_View AS
      SELECT ...
      

      【讨论】:

        猜你喜欢
        • 2017-06-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-23
        • 2011-10-06
        • 2018-07-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多