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