Я пытаюсь создать динамический сценарий создания базы данных.Создать вид с динамическим Sql
Есть много шагов, и мы часто создаем эту базу данных, поэтому сценарий выглядит примерно так.
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 вы можете указать только схему.
Итак, вот три вещи, которые я пробовал без успеха.
--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]')
Любые предложения? Я думаю, что это должно быть распространенным случаем, но Google не смог мне помочь.
Amazing. Я люблю это. Я проверю очень быстро. –
Вот еще один хороший ответ http://dba.stackexchange.com/a/56956/30584 –
WOW! Я трепетал головой о проблеме в течение 3 дней и никогда не думал об этом! Блестяще, спасибо! –