2017-12-20 20 views
0

저장 프로 시저를 생성해야하는 문제가 있습니다.삽입 프로 시저 외래 키가 다른 테이블에 있는지 확인하십시오.

CREATE PROCEDURE InsertTrail ( 
@Mount    int, 
@Skill    varchar(20), 
@Snow    int, 
@Lift    int, 
@Open    char(3), 
@AmountReal  int, 
@AmountFake  int, 
@Name    varchar(50) 
) 
AS 
BEGIN 
If not exists (select mountainid from MOUNTAIN where @mount = mountainid) 
and 
If not exists (select skilllevel from SKILLLEVEL where @skill = SkillLevel) 
and 
If not exists (select snowmakerID from SNOWMAKER where @snow = SnowMakerID) 
and 
If not exists (select liftID from LIFT where @lift = LiftID) 
BEGIN 
    INSERT INTO TRAIL (MountainID, SkillLevel, SnowMakerID, LiftID, TOpen, AmountRealSnow, AmountFakeSnow, TrailName) 
    values 
    (@Mount, @Skill, @Snow, @Lift, @Open, @AmountReal, @AmountFake, @Name) 
    Return @@Identity 
END 
END 

나는 확실히 존재를 만들기 위해 필요한 열은 산 테이블의 mountainid의에서 skilllevel 있습니다 : 내 저장 프로 시저가 열이 다른 테이블에 존재하는지 확인하기 위해 필요하지만,이 순간에 내 코드입니다 SKILLLEVEL 테이블, snowmakerertable의 snowmakerid 및 리프트 테이블의 liftID.

더 자세한 정보가 필요하면 알려주세요. 할 수 있으면 도와주세요!

+0

** 열 **이 있는지 확인해야합니까, 아니면 해당 열에 ** 값 **이있는 레코드가 있는지 확인해야합니까? 또한 현재 이러한 값이없는 경우에만 현재 값을 삽입합니다. –

+0

삽입 할 값이 다른 테이블의 레코드와 일치하는지 확인해야합니다. 그래서 먼저 "존재하지 않는다면"에서 "존재할 경우"로 변경해야합니다 –

+0

안녕하세요 조쉬 !!! 도와 줘서 고마워 !! "IF NOT"을 제거하고이 문제를 해결할 수있었습니다. "EXISTS"프로시 저는 이제 성공적으로 작동합니다! :) –

답변

0

현재 이러한 값이없는 경우에만 값을 삽입합니다. 삽입하기 전에 모든 값이 존재하는지 확인하려면 IF NOT EXISTS 대신 IF EXISTS을 사용해야합니다.

여전히 가장 쉬운 방법은 외래 키를 만들고 데이터베이스 관리자가이 유효성 검사를 처리하도록하는 것입니다.

샘플 코드의 구문에 따라 SQL SERVER이라고 가정합니다.

ALTER TABLE TRAIL 
ADD CONSTRAINT [FK_TRAIL_MOUNTAIN] FOREING KEY [MountainID] 
REFERENCES [MOUNTAIN] ([MountainID]) 

ALTER TABLE TRAIL 
ADD CONSTRAINT [FK_TRAIL_SKILLLEVEL] FOREING KEY [SkillLevel] 
REFERENCES [SKILLLEVEL] ([SkillLevel]) 

ALTER TABLE TRAIL 
ADD CONSTRAINT [FK_TRAIL_SNOWMAKER] FOREING KEY [SnowMakerID] 
REFERENCES [SNOWMAKER] ([SnowMakerID]) 

ALTER TABLE TRAIL 
ADD CONSTRAINT [FK_TRAIL_LIFT] FOREING KEY [LiftID] 
REFERENCES [LIFT] ([LiftID]) 

는 또한 IMO 당신은 또한 클라이언트 측에서 이러한 값을 확인해야하고, 비 참조 값이있을 때 당신의 SP "충돌"하자 : 나는 쿼리를 변경 틀렸다면 정정 해줘.