Я удивлен, что такого раньше не было, но я не нашел ничего в поисках ни здесь, ни где-либо еще. Я обнаружил что-то неопределенно похожее, что указывает на то, что проблема в том, что команда Use в моем скрипте действует только для этой одной строки, но не было никаких указаний на то, как обойти это.
Что я пытаюсь сделать: создать универсальный скрипт для создания базы данных «шаблонов» со всеми моими общими схемами и таблицами. Все переменные (например, имя базы данных) предназначены для установки в заголовке, чтобы их можно было изменять по мере необходимости, а сценарий можно просто запустить без необходимости выполнять какие-либо рискованные операции поиска и замены для изменения жестко закодированных значений.
В чем проблема: я не могу заставить схемы генерироваться в нужной базе данных; все они порождают в Мастере. Попытка явно установить базу данных не помогла; Я только что получил ошибки во время выполнения.
Мой уровень мастерства: длительный доступ к пользователю, но все еще в предгорьях изучения SQL Server. Я уверен (хорошо, надеясь), что это будет нелепо легко для кого-то, кто поднимется по склону.
Кто-нибудь знает, как я могу сделать что-то подобное? (Существующий код показан ниже.)
DECLARE @DBName NVARCHAR(50) = 'TheDBName';
-- Assume that there's a bunch of code to drop and create the database goes here.
-- This code executes correctly.
SET @SQL = 'Use [' + @DBName + ']';
Print @SQL;
EXEC(@SQL);
SET @Counter = 1;
WHILE @Counter <=3
BEGIN
SET @SQL = 'CREATE SCHEMA [' +
CASE @Counter
WHEN 1 THEN 'Schema1'
WHEN 2 THEN 'Schema2'
WHEN 3 THEN 'Schema3'
END
SET @SQL = @SQL + '] AUTHORIZATION [dbo]';
PRINT 'Creating Schemas, ' + @SQL;
Exec(@SQL);
SET @Counter = @Counter + 1;
END