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

时间:2010-07-30 16:06:05

标签: sql sql-server database

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

我正在从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。

4 个答案:

答案 0 :(得分:19)

在查询之间插入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 condition
BEGIN
   ....
   ....
END

答案 1 :(得分:4)

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

USE dbname

这样就可以在正确的位置创建表格,而无需在所有内容上指定数据库名称。

此外,GO和BEGIN ...... END就像其他人一样说。

答案 2 :(得分:1)

在语句之间放置GO(以创建单独的批处理语句)

答案 3 :(得分:0)

您必须使用GO关键字分隔语句:

sql query
GO

another sql query
GO

and so on