SQL - 在一个脚本中创建数据库和表

sas*_*740 12 sql database sql-server

很抱歉,如果已经被问到,但我找不到任何相关内容.

我正在从MySQL迁移到SQL Server我希望有一个.sql文件在数据库中创建数据库和表.在弄清楚语法扭结后,我已经让文件工作了(差不多).

如果我跑

IF db_id('dbname') IS NULL 
    CREATE DATABASE dbname
Run Code Online (Sandbox Code Playgroud)

它工作正常,如果我跑

CREATE TABLE dbname.dbo.TABLE1 (
);
...
CREATE TABLE dbname.dbo.TABLEN (
);
Run Code Online (Sandbox Code Playgroud)

它也工作正常.但是,如果我在同一个文件中运行它们,我会收到此错误

Database 'dbname' does not exist
Run Code Online (Sandbox Code Playgroud)

现在,CREATE TABLE语句不在我想要的IF语句中,但我似乎也找不到它的语法.({}不起作用?)

所以我的重要问题是,如何确保.sql文件中的特定命令在SQL Server中的另一个之前完成?

我的第二个问题是,如何在IF子句中包含多个指令?

为了清楚起见,我已将其运行到sqlcmd中.

Fos*_*sco 19

GO在查询之间放置命令.

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

GO

CREATE TABLE dbname.dbo.TABLE1 ( 
); 

CREATE TABLE dbname.dbo.TABLEN ( 
); 
Run Code Online (Sandbox Code Playgroud)

至于将表语句放在IF中,由于GO命令,你将无法进行.您可以在之后创建其他IF语句,以检查每个表是否存在.

块if的语法是:

IF condition
BEGIN
   ....
   ....
END
Run Code Online (Sandbox Code Playgroud)


Jef*_*dge 5

在创建数据库和创建表之间,您将需要USE语句。

USE dbname
Run Code Online (Sandbox Code Playgroud)

这样,将在正确的位置创建表,而不必在所有内容上指定数据库名称。

另外,像其他所有人一样,开始并开始...结束。