SQL Server 2008 R2:“CREATE/ALTER VIEW”不允许将数据库名称指定为对象名称的前缀

问题描述 投票:0回答:5

我有 2 个数据库

DB1
DB2

我有一个名为

View1
的视图,它存储在数据库中
DB2
。现在我想从
ALTER VIEW
数据库中获取
DB1

我的尝试:

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

但我收到错误:

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

sql-server sql-server-2008-r2
5个回答
17
投票

很简单:你需要更改数据库

USE DB2
GO

ALTER VIEW View1
    ...

2
投票

在我的例子中,我试图运行一个脚本来创建/更改不同数据库中的视图,所以我使用

EXEC (...)
来创建我的视图..
但我遇到了一些悖论:
EXEC ('CREATE VIEW...')
不会让您指定数据库。您必须切换到该数据库才能创建视图。
但你不能执行
EXEC ('USE [db]; CREATE VIEW...')
,因为
CREATE VIEW
会要求它成为第一个命令。 我解决了这个问题,感觉就像我去了Inception
EXEC('USE [db]; EXEC('CREATE VIEW'))


1
投票

评论是不言自明的。您需要在您的视图所在的数据库中工作。将您的连接切换到

DB2
,您应该能够
CREATE
ALTER
/您的视图。 来自MSDN


0
投票

我在 Azure Data Studio 中连接到同一个数据库

server:DB1
,我想要在其中查看视图,并从中得到错误:

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

我删除了前缀,这有效:

CREATE OR ALTER VIEW my_View AS
SELECT ...

0
投票

埃里克上面的天才回答救了我的命。需要注意的一件事是,第二个封装的 EXEC 将需要两个单引号来打开/关闭它,ala: EXEC(''...'')。

另外,就我而言,我正在创建一个存储过程,因此我需要将存储过程中的单引号四倍化才能使事情正常工作。所以,

DECLARE @Name varchar(25) = ''

成为

DECLARE @Name varchar(25) = ''''''''

幸运的是,搜索和替换使这一切变得容易。

希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.