【问题标题】:SQL - create database and tables in one scriptSQL - 在一个脚本中创建数据库和表
【发布时间】:2010-07-30 16:06:04
【问题描述】:

对不起,如果已经问过了,但我在这方面找不到任何东西。

我正在将一些东西从 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 中运行它。

【问题讨论】:

  • 这些语句不是并行执行的,因此您可能需要修改标题。

标签: sql sql-server database


【解决方案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 关键字分隔语句:

      sql query
      GO
      
      another sql query
      GO
      
      and so on
      

      【讨论】:

        【解决方案4】:

        通过在语句之间放置GO(以创建单独的语句批次)

        【讨论】:

          猜你喜欢
          • 2011-08-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-03-03
          相关资源
          最近更新 更多