2013-07-20 3 views
0

에서 '역할'라는 개체가 이미 있습니다, 나는 예외를 얻을 :내 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

, 당신이 좋지 않은 테이블 이름으로이 예약어를 포착 한 개체가있다라고하지만,있는 moreso 그들이있어 기존 객체의 이름. 다른 이름을 선택해야합니다.

은 기술적으로이 같은 사용자 테이블을 만들 수 있습니다

CREATE TABLE dbo.[user] 

그러나 당신은 테이블 이름으로 예약 된 단어를 사용하지 말아야합니다. 또한 테이블을 만들 때 올바른 데이터베이스를 사용하고 있는지 확인하십시오.

USE PortalDB 
GO 

을 아니면 CREATE TABLE 등에서 지정할 수 있습니다 : 데이터베이스 작성 후 사용할 수 있습니다

CREATE TABLE PortalDB.dbo.[tablename] 
+0

테이블 이름이 변경되었지만 여전히 예외입니다. 나는 너무 많은 단어를 시도했다. – fuat

+0

실행했습니다 SELECT * FROM sys.objects msssql 서버가 sys.objects에 내 모든 테이블 이름을 만들었습니다. 뭐가 잘못 됐는지 이해가 안돼. – fuat

+0

시도한 CREATE TABLE dbo. [user] 여전히 동일한 예외. – fuat

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) 
    ) 
1

1)이 스크립트의 주된 문제는 master 데이터베이스에 두 개의 테이블 ([Role][User])를 만들려고한다는 것입니다. CREATE DATABASE PortalDB 현재 연결에 대한 활성 데이터베이스가 여전히 데이터베이스 master이기 때문에 이러한 현상이 발생합니다. 무엇을 할 수 있습니까?

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 DATABASE PortalDB 후 다른 USE와 현재의 연결에 대한 활성 데이터베이스를 변경해야합니다 :

CREATE TABLE [dbo].[Role]... 
+0

도움 주셔서 감사합니다. 이 정보는 매우 유용합니다. – fuat

0

왜 마스터에 개체를 만드십니까? 그것은 시스템 DB입니다.

+0

감사합니다. – fuat

관련 문제