2012-05-30 3 views
0

MSSQL 관리 스튜디오에 두 테이블을 연결하는 데 문제가 있습니다. 내 목표는 외래 키로 테이블을 연결하는 것이며 사용자를 삭제하면 두 번째 테이블 항목이 자동으로 삭제됩니다. DELETE Cascade 메서드를 사용하려고합니다.주 키 외래 키 문제

User: 
CREATE TABLE [dbo].[Users](
[ID] [bigint] IDENTITY(1,1) NOT NULL, 
[Email] [nvarchar](89) NOT NULL, 
[Name] [nvarchar](25) NOT NULL, 
[Midname] [nvarchar](25) NOT NULL, 
[Surname] [nvarchar](25) NOT NULL, 
[Phone] [varchar](15) NOT NULL, 
[Country] [smallint] NOT NULL, 
[Manager] [nvarchar](89) NOT NULL, 
[Referrer] [nvarchar](89) NOT NULL, 
[Rank] [tinyint] NOT NULL, 
CONSTRAINT [PK_Users] PRIMARY KEY CLUSTERED 
(
[Email] 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 

이메일은 기본 키

Payments: 
CREATE TABLE [dbo].[Investments](
[ID] [bigint] NOT NULL, 
[Investor] [nvarchar](89) NOT NULL, 
[Sum] [decimal](19, 4) NOT NULL, 
[Currency] [smallint] NOT NULL, 
[Credit] [decimal](19, 4) NOT NULL, 
[CreditRate] [decimal](19, 4) NOT NULL, 
[Rate] [tinyint] IDENTITY(1,1) NOT NULL, 
[Date] [smalldatetime] NOT NULL, 
[Comment] [nvarchar](max) NOT NULL, 
CONSTRAINT [PK_Investments] PRIMARY KEY CLUSTERED 
(
     [ID] 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 

ID 내 FK는 USER-> 결제 또는 PAYMENTS-> 이용자해야

키 차입니다? 어디에 문제가

The columns in table 'Payments' do not match an existing primary key or UNIQUE constraint.

당신이 설명해 주 시겠어요 : - 이메일로 foregn 키를 사용하여> 결제 - 나는 사용자를 연결하려고 할 때

은> 투자, 그것은 나에게 같은 오류를 말해? 그리고 내가 뭘 잘못하고 있니?

+0

Users.ID에 가입하고 당신이 외국처럼 두 번째 테이블에 이메일을 설정? here 문을 추가하십시오. – Sajmon

+2

1) 테이블에 DDL을 게시하십시오. 2) 전자 메일 주소를 기본 키로 사용하는 것은 정말 좋지 않습니다. – Perception

+0

[sql] 질문에 태그를 지정했는데 어떤 질문을 했습니까? Oracle, MS SQL Server, MySQL ... 또한 오류를보고하는 쿼리를 게시하여 사람들이 문제를 해결하는 데 도움이됩니다. – Tony

답변

3
은 당신의 구조를 변경

:

CREATE TABLE [dbo].[Users](
[ID] [bigint] IDENTITY(1,1) NOT NULL, 
[Email] [nvarchar](89) NOT NULL, 
[Name] [nvarchar](25) NOT NULL, 
[Midname] [nvarchar](25) NOT NULL, 
[Surname] [nvarchar](25) NOT NULL, 
[Phone] [varchar](15) NOT NULL, 
[Country] [smallint] NOT NULL, 
[Manager] [nvarchar](89) NOT NULL, 
[Referrer] [nvarchar](89) NOT NULL, 
[Rank] [tinyint] NOT NULL); 

ALTER TABLE [Users] 
ADD CONSTRAINT PK_UsersID PRIMARY KEY (ID); 

다음

CREATE TABLE [dbo].[Investments](
[ID] [bigint] NOT NULL, 
[UserID] [bigint] NOT NULL, 
[Sum] [decimal](19, 4) NOT NULL, 
[Currency] [smallint] NOT NULL, 
[Credit] [decimal](19, 4) NOT NULL, 
[CreditRate] [decimal](19, 4) NOT NULL, 
[Rate] [tinyint] IDENTITY(1,1) NOT NULL, 
[Date] [smalldatetime] NOT NULL, 
[Comment] [nvarchar](max) NOT NULL); 

ALTER TABLE Investments 
ADD CONSTRAINT PK_InstestmentsID PRIMARY KEY (ID); 

ALTER TABLE Investments 
ADD CONSTRAINT FK_UsersInvestments 
FOREIGN KEY (UserID) 
REFERENCES Users(ID); 

그런 Investments.UserID

+0

메시지 1776, 수준 16, 상태 0, 줄 1 외부 키 'FK__Investmen__UserI__15502E78'의 참조 열 목록과 일치하는 참조 된 테이블 'Users'의 주 또는 후보 키가 없습니다. 메시지 1750, 수준 16, 상태 0, 줄 1 제약 조건을 만들지 못했습니다. 이전 오류를 참조하십시오. –

+0

죄송합니다. 나는 약간의 편집을했다. 원래 (사용자) 테이블의 PK를 [ID]로 아직 변경하지 않았습니다. – swasheck

+0

Unfortunatelly 잘못된 구문을 알려줍니다. 메시지 102, 수준 15, 상태 1, 줄 11 ','근처에 구문이 잘못되었습니다. 메시지 319, 수준 15, 상태 1, 줄 15 'with'키워드 근처의 구문이 잘못되었습니다. 이 문이 공통 테이블 식, xmlnamespaces 절 또는 변경 내용 추적 컨텍스트 절인 경우 이전 문은 세미콜론으로 끝나야합니다. –

2

(테이블 이름없이) 표시되는 오류 메시지를 검색했으며 은 PRIMARY KEY 또는 UNIQUE 컨 스트레인 트가 테이블에 올바르게 설정되지 않은 것으로 보입니다. 오류는 SQL Server를 사용하고 있다고 (아마) 말합니다. technet.microsoft.com에서

:

The columns on the primary key side of a foreign key relationship must participate in either a Primary Key or a Unique Constraint. After setting up a Primary Key or a Unique constraint for one of the tables you've selected, you can then define other relationships for that table.

체크하여 두 테이블 PRIMARY KEYS. 테이블의 실제 DDL이 없으면 더 많은 도움을 받기가 어렵습니다.

편집 : 당신은 당신의 Users 테이블에 PRIMARY KEYEmail 가지고 있지만 나는 Investments 테이블에 Email 필드가 표시되지 않습니다. 당신은 어떤 분야에서 당신의 구속에 동참하고 있습니까?

+0

답장을 보내 주셔서 감사합니다. 토니, 내 수정 사항을 확인할 수 있습니까? –

+0

테이블에 대한 DDL을 게시 한 경우 도움이됩니다. Management Studio에서 테이블을 마우스 오른쪽 단추로 클릭하고 "다른 이름으로 스크립트 ..."를 선택한 다음 "만들기"를 선택합니다. 테이블이 올바르게 정의되었는지 확인할 수 있도록 SQL 스크립트를 게시하십시오. – Tony

+0

아무런 문제가 없습니다. :) –