Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如果数据库不存在,则创建数据库_Sql_Sql Server - Fatal编程技术网

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

Sql 如果数据库不存在,则创建数据库,sql,sql-server,Sql,Sql Server,如果数据库不存在,我想创建用于创建数据库的sqlserverscritp 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 VARC

如果数据库不存在,我想创建用于创建数据库的
sqlserver
scritp

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
从上面的代码中,我得到以下错误:

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


当数据库不存在时,如何使用表和过程创建数据库?我想在一个查询中完成它

您能检查以下脚本吗:

    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
你可以试试这个

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

显然,你必须从以下几点开始(注意这里的
GO
):

但你必须这样做:

IF NOT EXISTS (SELECT * FROM sys.databases WHERE name = 'MyTestDataBase')
BEGIN
  CREATE DATABASE MyTestDataBase;
END;
GO
小心
GO
。如果您不使用
GO
SSMS(或任何其他客户机)仍会认为批处理未完成,数据库仍未创建,因此无法继续使用,并且您会收到您发布的错误消息

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

USE MyTestDataBase;
GO
请再次注意
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

谢谢,它可以工作,但我们真的需要每次检查表是否存在吗?没有选项只检查数据库是否存在,然后创建表?在接下来的步骤中,我想创建带有数据库的过程,这样它就会变得复杂起来
IF EXISTS (SELECT * FROM sys.databases WHERE name = 'MyTestDataBase')
BEGIN
    DROP DATABASE MyTestDataBase;  
END;
CREATE DATABASE MyTestDataBase;
GO