我正在尝试创建一个动态数据库创建脚本.
有很多步骤,我们经常创建这个数据库,所以脚本看起来像这样.
DECLARE @databaseName nvarchar(100) = 'DatabaseName'
EXEC('/*A lot of database creation code built off of @databaseName*/')
除了我们在此数据库中创建的一个视图外,这一切都很好.
我理解的问题源于SQL中关于EXEC命令的三个规则
> USE背景只对EXEC的生命有效
>’CREATE VIEW’必须是查询批处理中的第一个语句
> GO实际上不是SQL命令,因此在动态sql中不允许这样做
>在CREATE VIEW上,您只能指定为Schema.
所以这里有三件我尝试过但没有成功的事情.
--1.Results in my view not being created in my database
EXEC ('USE [' + @databaseName + ']')
EXEC ('CREATE VIEW')
--2.Results in a 'CREATE VIEW' must be the first statement in a query batch
EXEC
('
USE [' + @databaseName + ']
CREATE VIEW
')
--3.Results in Incorrect syntax near 'GO'
EXEC
('
USE [' + @databaseName + ']
GO
CREATE VIEW
')
--4.Results in 'CREATE/ALTER VIEW' does not allow specifying the database name as a prefix to the object name.
EXEC ('CREATE VIEW [' + @databaseName + '].[dbo].[ViewName]')
有什么建议?我认为这应该是一个常见的用例,但谷歌无法帮助我.