2013-06-27 61 views
2

我创建了我的数据库的脚本。SQL生成脚本不创建数据库

但是当我运行它时,脚本不会创建数据库。它会跳过“创建DB”的声明,只有创建表(在数据库上我此刻的选择,所以并不理想....)

(与查询的方式没有错误执行。)

这是怎么发生的?为什么不能创建数据库并一次性编辑数据库中的内容?

(我知道,如果分贝首先存在,您可以检查,但是这不应该从一开始就发生)

- 我Script--

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 

回答

5

您必须使用GO CREATE DATABASE后[EthicsDB。

+0

+1了很好的答案。 – Devart

0

你或许应该换每个动作在一个交易块中。

此外,当您创建表时,我通常会检查它是否已经存在。

如果您运行只有创建数据库,会发生什么情况?

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

如果您运行的是只要你上线

USE [EthicsDB] 

出现这种情况的SQL Server时收到错误消息的SQL运行通过SQL CMD SQL命令它在处理批量SQL。

由于您在创建数据库语句后没有GO语句,可能SQL Server尚未识别出已创建新的数据库Ethics,因此当您尝试通过USE [EthicsDB]使用数据库时,语句失败。

由于您的SQL语句未包含在事务中,并且您没有检查错误,因此如果SQL Server遇到错误,它将引发错误,但也会继续处理其余查询。

在提供的查询中,这会导致在当前数据库中创建新表。

要解决的问题修改查询

CREATE DATABASE [EthicsDB] 
go 
USE [EthicsDB] 
go 
相关问题