SQL - создание базы данных и таблиц в одном script

Извините, если вас уже спросили, но я ничего не могу найти по этому поводу.

Я что-то перебираю из MySQL в SQL Server. Я хочу, чтобы файл .sql создавал базу данных и таблицы в базе данных. После разработки синтаксических кинков я получил файлы для работы (почти).

Если я запустил

IF db_id('dbname') IS NULL 
    CREATE DATABASE dbname

он работает нормально, и если я запустил

CREATE TABLE dbname.dbo.TABLE1 (
);
...
CREATE TABLE dbname.dbo.TABLEN (
);

он также отлично работает. Но, если я запустил их в том же файле, я получаю эту ошибку

Database 'dbname' does not exist

Прямо сейчас, операторы CREATE TABLE не входят в оператор IF, который я бы хотел, но я также не могу найти синтаксис для этого. ({} не работает?)

Итак, мой большой вопрос: , как я могу убедиться, что определенная команда в файле .sql завершена до другого в SQL Server?

Мой второй вопрос: как включить несколько инструкций в предложение IF?

Чтобы быть ясным, я запускал это в sqlcmd.

Ответ 1

Поместите команду GO между запросами.

IF db_id('dbname') IS NULL 
    CREATE DATABASE dbname

GO

CREATE TABLE dbname.dbo.TABLE1 ( 
); 

CREATE TABLE dbname.dbo.TABLEN ( 
); 

Что касается размещения операторов таблицы в IF, вы не сможете из-за команды GO. После этого вы могли бы создать дополнительные IF-инструкции, чтобы проверить наличие всех таблиц.

Синтаксис для блока if:

IF condition
BEGIN
   ....
   ....
END

Ответ 2

Между созданием базы данных и созданием таблиц вам понадобится инструкция USE.

USE dbname

Таким образом, таблицы будут созданы в нужном месте, без необходимости указывать имя БД во всем.

Кроме того, GO и BEGIN... END, как и все остальные, говорят.

Ответ 3

Поместив GO между операторами (для создания отдельных партий инструкций)

Ответ 4

Вам нужно отделить инструкции с помощью GO ключевое слово:

sql query
GO

another sql query
GO

and so on