SQL Server 如果数据库不存在,则创建数据库

5jdjgkvh  于 2022-11-28  发布在  其他
关注(0)|答案(3)|浏览(385)

如果数据库不存在,我想制作用于创建数据库的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行数据库'数据库'不存在。请确保输入的名称正确。
当数据库不存在的时候,如何用表和过程创建数据库?我想在一个查询中创建它。

hmmo2u0o

hmmo2u0o1#

请检查以下脚本:

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
juud5qan

juud5qan2#

显然,您必须从以下内容开始(注意此处的GO):

USE master
GO

但你必须这样做:

IF NOT EXISTS (SELECT * FROM sys.databases WHERE name = 'MyTestDataBase')
BEGIN
  CREATE DATABASE MyTestDataBase;
END;
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
hiz5n14c

hiz5n14c3#

你可以试试这个。

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

USE [DataBase]
GO

IF NOT EXISTS (
        SELECT 1
        FROM sys.tables
        WHERE name = 'TableName'
            AND type = 'U'
        )
BEGIN
    CREATE TABLE TableName (
        Id INT PRIMARY KEY IDENTITY(1, 1)
        ,Name VARCHAR(100)
        )
END

相关问题