如果数据库不存在则创建数据库

新手上路,请多包涵

如果不存在,我想制作 SQL Server 创建数据库的脚本。

 IF NOT EXISTS(SELECT * FROM sys.databases WHERE name = 'DataBase')
  BEGIN
    CREATE DATABASE DataBase

    USE DataBase

    CREATE TABLE TableName (
        Id INT PRIMARY KEY IDENTITY (1, 1),
        Name VARCHAR(100)
    )

    --more tables here
    --some procedures here too

  END

从上面的代码我得到这个错误:

消息 911,级别 16,状态 1,第 5 行数据库“数据库”不存在。确保输入的名称正确。

数据库不存在时如何用表和过程制作数据库?我想在一个查询中完成

原文由 michasaucer 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

您能否检查以下脚本:

     IF NOT EXISTS(SELECT * FROM sys.databases WHERE name = 'DataBase')
  BEGIN
    CREATE DATABASE [DataBase]

    END
    GO
       USE [DataBase]
    GO
--You need to check if the table exists
IF NOT EXISTS (SELECT * FROM sysobjects WHERE name='TableName' and xtype='U')
BEGIN
    CREATE TABLE TableName (
        Id INT PRIMARY KEY IDENTITY (1, 1),
        Name VARCHAR(100)
    )
END

原文由 Esat Erkec 发布,翻译遵循 CC BY-SA 4.0 许可协议

显然你必须从(这里注意 GO )开始:

 USE master
GO

但是你必须这样做:

 IF NOT EXISTS (SELECT * FROM sys.databases WHERE name = 'MyTestDataBase')
BEGIN
  CREATE DATABASE MyTestDataBase;
END;
GO

再次注意 GO 。如果您不使用 GO SSMS(或任何其他客户端)仍会认为您的批处理尚未完成,您的数据库仍未创建,因此无法进一步使用,并且您会收到错误消息张贴。

现在您可以开始使用刚刚创建的数据库:

 USE MyTestDataBase;
GO

同样,请注意 GO 声明。在这种情况下,它是不可接受的,因为不可能在一批中组合 CREATE DATABASECREATE TABLE 语句。所以在 GO 之后继续:

 IF OBJECT_ID('MyTestTable', 'U') IS NULL
BEGIN
  CREATE TABLE dbo.MyTestTable
  (
    Id   INT PRIMARY KEY IDENTITY(1, 1)
  , Name VARCHAR(100)
  );
END;

正如其他人已经提到的,最好检查每个表是否存在,如果不存在则执行创建操作,如果存在则更改操作(或不执行任何操作)。但是,如果您真的不想检查每个表是否存在,例如当您确定需要从头开始时,您可以从删除数据库(如果存在)开始:

 IF EXISTS (SELECT * FROM sys.databases WHERE name = 'MyTestDataBase')
BEGIN
    DROP DATABASE MyTestDataBase;
END;
CREATE DATABASE MyTestDataBase;
GO

原文由 Thailo 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏