1

如果数据库不存在,我正在尝试编写一个小脚本来创建数据库,如果该表不存在,则为该数据库创建一个表。我所拥有的是:

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'不存在,所以它不能使用它。

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

解决了!

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

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

很抱歉浪费了大家的时间。

4

3 回答 3

2

SQL 语句被解析为一批,除非您将它们分开。在 SQL Server 中,您可以使用 GO 来执行此操作。在 MySQL 和 SQL Server 中,您可以使用 BEGIN 和 END。

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

于 2013-10-08T20:26:41.887 回答
1

类似于检查表是否存在于 SQL Server 中的东西可能会起作用(稍作更改)

IF (NOT EXISTS (SELECT * 
                 FROM INFORMATION_SCHEMA.TABLES 
                 WHERE TABLE_SCHEMA = 'TheSchema' 
                 AND  TABLE_NAME = 'TheTable'))
BEGIN
    --Do Stuff
END
于 2013-10-08T20:11:16.683 回答
0

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

如果不存在则创建数据库名称;

而随后

如果不存在,则创建表名称(定义);

于 2013-10-08T20:06:26.207 回答