我有 2 个数据库
DB1
和 DB2
。
我有一个名为
View1
的视图,它存储在数据库中 DB2
。现在我想从 ALTER VIEW
数据库中获取 DB1
。
我的尝试:
ALTER VIEW DB2..View1
AS
SELECT * FROM DB2..Test;
但我收到错误:
“CREATE/ALTER VIEW”不允许将数据库名称指定为对象名称的前缀
很简单:你需要更改数据库
USE DB2
GO
ALTER VIEW View1
...
在我的例子中,我试图运行一个脚本来创建/更改不同数据库中的视图,所以我使用
EXEC (...)
来创建我的视图.. EXEC ('CREATE VIEW...')
不会让您指定数据库。您必须切换到该数据库才能创建视图。EXEC ('USE [db]; CREATE VIEW...')
,因为 CREATE VIEW
会要求它成为第一个命令。
我解决了这个问题,感觉就像我去了Inception:EXEC('USE [db]; EXEC('CREATE VIEW'))
我在 Azure Data Studio 中连接到同一个数据库
server:DB1
,我想要在其中查看视图,并从中得到错误:
CREATE OR ALTER VIEW DB1.dbo.my_View AS
SELECT ...
我删除了前缀,这有效:
CREATE OR ALTER VIEW my_View AS
SELECT ...
埃里克上面的天才回答救了我的命。需要注意的一件事是,第二个封装的 EXEC 将需要两个单引号来打开/关闭它,ala: EXEC(''...'')。
另外,就我而言,我正在创建一个存储过程,因此我需要将存储过程中的单引号四倍化才能使事情正常工作。所以,
DECLARE @Name varchar(25) = ''
成为
DECLARE @Name varchar(25) = ''''''''
幸运的是,搜索和替换使这一切变得容易。
希望这有帮助!