有条件地创建数据库和表

时间:2013-10-08 20:01:46

标签: sql sql-server

我正在尝试编写一个小脚本来创建一个数据库(如果它不存在),并在该表不存在时为该数据库创建一个表。我有这个:

IF (db_id('db') is null) BEGIN
    print 'Must create the database!';
    CREATE DATABASE db;
END

USE db;

IF (object_id('test_table', 'U') is null) BEGIN
    print 'Must create the table!';
    CREATE TABLE test_table (
        id int
    );
END

我发现了一个奇怪的错误:

Database 'db' does not exist. Make sure that the name is entered correctly.

我猜它是在运行它之前解析脚本并发现'db'不存在,所以它不能使用它。

必须有一个解决方案。任何帮助表示赞赏。

解决!

我发布了GO关键字解决问题后5分钟。这是固定代码:

IF (db_id('db') is null) BEGIN
    print 'Must create the database!'
    CREATE DATABASE db;
END

GO
USE db

IF (object_id('test_table', 'U') is null) BEGIN
    print 'Must create the table!';
    CREATE TABLE test_table (
        id int
    );
END

抱歉浪费每个人的时间。

3 个答案:

答案 0 :(得分:2)

除非将它们分开,否则S​​QL语句将被解析为一个批处理。在SQL Server中,您可以使用GO执行此操作。在MySQL和SQL Server中,您都可以使用BEGIN和END。

如果要在不同的实例中将单独的块提交到数据库,可以分别对SQL Server和MySQL使用BEGIN TRANS / COMMIT TRANS和START TRANSACTION / COMMIT。

答案 1 :(得分:1)

Check if table exists in SQL Server的某些内容可能会有效(稍有变化)

IF (NOT EXISTS (SELECT * 
                 FROM INFORMATION_SCHEMA.TABLES 
                 WHERE TABLE_SCHEMA = 'TheSchema' 
                 AND  TABLE_NAME = 'TheTable'))
BEGIN
    --Do Stuff
END

答案 2 :(得分:0)

我可能会建议使用内置的SQL语法 -

CREATE DATABASE name IF NOT EXISTS;

随后

CREATE TABLE name(definition)IF NOT EXISTS;