我遇到了一个我应该创建存储过程的问题。但是我的存储过程需要检查列是否存在于不同的表中,这是我目前的代码:
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
我需要确保存在的列是山地桌上的山地车,SKILLLEVEL桌上的技巧级别,雪地里的雪地车和升降台中的liftID。
如果您需要更多信息,请告诉我们!如果可以,请帮忙!
答案 0 :(得分:0)
目前,只有在不存在这些值时才会插入您的值。如果您想在插入前检查所有值是否存在,则应使用IF EXISTS
代替IF NOT 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“崩溃”。