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
Run Code Online (Sandbox Code Playgroud)
从上面的代码我得到这个错误:
消息 911,级别 16,状态 1,第 5 行数据库“DataBase”不存在。确保正确输入名称。
当数据库不存在时,如何使用表和过程创建数据库?我想在一个查询中完成
New*_*Man 12
您能否检查以下脚本:
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
Run Code Online (Sandbox Code Playgroud)
Tha*_*ilo 11
显然你必须从(并注意GO
这里)开始:
USE master
GO
Run Code Online (Sandbox Code Playgroud)
但是你必须这样做:
IF NOT EXISTS (SELECT * FROM sys.databases WHERE name = 'MyTestDataBase')
BEGIN
CREATE DATABASE MyTestDataBase;
END;
GO
Run Code Online (Sandbox Code Playgroud)
GO
再介意。如果您不使用GO
SSMS(或任何其他客户端),仍然会认为您的批处理未完成,您的数据库仍未创建,因此无法进一步使用,并且您会收到您发布的错误消息。
现在您可以开始使用您刚刚创建的数据库:
USE MyTestDataBase;
GO
Run Code Online (Sandbox Code Playgroud)
再次,注意GO
声明。在这种情况下,这是不可接受的,因为不可能在一批中组合CREATE DATABASE
和CREATE 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;
Run Code Online (Sandbox Code Playgroud)
正如其他人已经提到的,最好检查每个表是否存在,如果不存在则执行创建操作,如果存在则更改操作(或什么都不做)。但是,如果您真的不想检查每个表是否存在,例如当您确定需要从头开始时,您可以从删除数据库(如果存在)开始:
IF EXISTS (SELECT * FROM sys.databases WHERE name = 'MyTestDataBase')
BEGIN
DROP DATABASE MyTestDataBase;
END;
CREATE DATABASE MyTestDataBase;
GO
Run Code Online (Sandbox Code Playgroud)