已经有一个名为' Roles'在数据库中

时间:2013-07-20 14:28:20

标签: sql sql-server sql-server-2008 tsql

当我尝试执行我的TSQL代码时,我得到了异常:

Msg 2714, Level 16, State 6, Line 2
There is already an object named 'Role' in the database.
Msg 2714, Level 16, State 6, Line 2
There is already an object named 'User' in the database.  

但我没有任何数据库。我需要建议。

代码如下所示:

USE master
GO
CREATE DATABASE PortalDB
GO

CREATE TABLE [Role]
(
    [ID] INT IDENTITY(1,1) PRIMARY KEY CLUSTERED,
    [Name] NVARCHAR(50) NOT NULL,
)
GO

CREATE TABLE [User]
(
    [ID] INT IDENTITY(1,1) PRIMARY KEY CLUSTERED,
    [Name] NVARCHAR(50) NOT NULL,
    [UserName] NVARCHAR(50) NOT NULL,
    [Password] NVARCHAR (100) NOT NULL,
    [Email] NVARCHAR (100) NOT NULL,
    [RoleID] INT NOT NULL FOREIGN KEY REFERENCES [Role](ID)
)

4 个答案:

答案 0 :(得分:4)

这并不是说有一个表,它说有一个对象,你选择了两个保留字作为表名,这是不理想的,但更多的是它们是现有对象的名称。你应该选择其他名字。

从技术上讲,你可以像这样创建一个用户表:

CREATE TABLE dbo.[user]

但是你不应该使用保留字作为表名。此外,请确保在创建表时使用正确的数据库。在创建数据库之后,您可以使用:

USE PortalDB
GO

或者您可以在CREATE TABLE中指定:

CREATE TABLE PortalDB.dbo.[tablename]

答案 1 :(得分:1)

1)此脚本的主要问题是它尝试在[Role]数据库中创建两个表([User]master)。 发生这种情况是因为当前连接的CREATE DATABASE PortalDB活动数据库仍然是数据库master。 你能做什么 ?在CREATE DATABASE PortalDB之后,您必须更改当前与另一个USE的连接的活动数据库:

USE master
GO
CREATE DATABASE PortalDB
GO
SELECT DB_NAME() AS CurrentDBBefore;
USE PortalDB; -- <- this statement will change active DB
SELECT DB_NAME() AS CurrentDBAfter;
GO
CREATE TABLE [dbo].[Role]...

2)当您必须使用表名时,请同时使用模式名称:

CREATE TABLE [MySchema].[MyTable]...

示例:

CREATE TABLE [dbo].[Role]...

答案 2 :(得分:0)

问题已解决。谢谢你。工作sql代码如下所示:

USE master
GO
CREATE DATABASE FancyDB
GO

    CREATE TABLE FancyDB..[Role]
    (
        [ID] INT IDENTITY(1,1) PRIMARY KEY CLUSTERED,
        [Name] NVARCHAR(50) NOT NULL,
    )
GO

    CREATE TABLE FancyDB..[User]
    (
        [ID] INT IDENTITY(1,1) PRIMARY KEY CLUSTERED,
        [Name] NVARCHAR(50) NOT NULL,
        [UserName] NVARCHAR(50) NOT NULL,
        [Password] NVARCHAR (100) NOT NULL,
        [Email] NVARCHAR (100) NOT NULL,
        [RoleID] INT NOT NULL FOREIGN KEY REFERENCES [Role](ID)
    )

答案 3 :(得分:0)

为什么要在Master中创建对象?这是一个系统数据库。