当我尝试执行我的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)
)
答案 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中创建对象?这是一个系统数据库。