我创建了一个数据库脚本。
但是当我运行它时,脚本不会创建数据库。它跳过“Create db”语句,只创建表(在我现在选择的数据库上,所以不太理想....)
(顺便执行查询时没有错误。)
为什么会这样?为什么你不能一次创建数据库并编辑其中的内容?
(我知道你可以先检查数据库是否存在,但这不应该从一开始就发生)
- 我的剧本 -
CREATE DATABASE [EthicsDB]
USE [EthicsDB]
go
CREATE TABLE [dbo].[TempEmployee](
[PersonnelNumber] [int] IDENTITY(1,1) NOT NULL,
[Name] [varchar](80) NULL,
[SurName] [varchar](80) NULL,
[ManagerEmail] [varchar](80) NULL,
[ManagerName] [varchar](80) NULL,
CONSTRAINT [PK_TempEmployee] PRIMARY KEY CLUSTERED
(
[PersonnelNumber] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
答案 0 :(得分:5)
您必须在CREATE DATABASE [EthicsDB]之后使用GO。
答案 1 :(得分:2)
试试这个 -
USE [master]
GO
IF EXISTS (
SELECT 1 FROM sys.databases WHERE name = N'EthicsDB'
)
DROP DATABASE [EthicsDB]
GO
CREATE DATABASE [EthicsDB]
GO --<----
USE [EthicsDB]
GO
CREATE TABLE [dbo].[TempEmployee](
[PersonnelNumber] [int] IDENTITY(1,1) NOT NULL,
[Name] [varchar](80) NULL,
[SurName] [varchar](80) NULL,
[ManagerEmail] [varchar](80) NULL,
[ManagerName] [varchar](80) NULL,
CONSTRAINT [PK_TempEmployee] PRIMARY KEY CLUSTERED
(
[PersonnelNumber] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
答案 2 :(得分:2)
如果您按照提供的方式运行SQL,则会在行
上收到错误消息USE [EthicsDB]
当SQL Server通过SQL CMD运行SQL命令时,它会批量处理SQL。
由于在创建数据库语句之后没有GO语句,因此可能SQL Server尚未识别出已创建新数据库Ethics,因此当您尝试通过USE [EthicsDB]使用数据库时,该语句将失败。 / p>
由于您的SQL语句未包含在事务中,并且您没有检查错误,因此如果SQL Server遇到错误,它将引发错误,但也会继续处理查询的其余部分。
在提供的查询中,这会导致在当前数据库中创建新表。
要解决此问题,请将查询修改为
CREATE DATABASE [EthicsDB]
go
USE [EthicsDB]
go
答案 3 :(得分:0)
您应该将每个操作包装在事务块中。
另外,在创建表格时,我通常会检查它是否已经存在。
如果你只运行 创建数据库,会发生什么?