我对存储过程有疑问。假设我的数据库中有2个表User
和Education
。
Table User Table Education
UserID University
UserName Qualification
... Field of Study
... .........
.... .........
.... UserID
问题是,例如:一个用户有两个学位(教育),当我尝试更新学位时,它会更新两个学位。
这是我的存储过程:
CREATE Procedure [dbo].[UpdateEducation]
@University,
@Qualification,
@FieldOfStudy,
@Grade,
@GDate,
@Location,
@Major,
@AddtionalInfo,
@UserID
AS
BEGIN
Update Education SET
University =@University,
Qualification=@Qualification,
FieldOfStudy=@FieldOfStudy,
Grade=@Grade,
GDate=@GDate,
Location=@Location,
Major=@Major,
AddtionalInfo=@AddtionalInfo
WHERE UserID=@UserID
END
GO
希望有人可以帮助我,因为我还是新手。 TQ
答案 0 :(得分:0)
如果没有唯一标识要更新的记录所需的所有信息,您的存储过程在技术上无法更新行。
你可以通过几种方式解决这个问题:
答案 1 :(得分:0)
您遇到的主要问题是您的用户表在教育表上将是1对多。您的更新告诉它更新教育表中UserID = @UserId的所有记录。您的更新语句需要引用教育表中的特定行。
Update Education
set field = value
where UserId = UserIdValue
and {pickAnotherField} = newFieldValue
但是,您仍然存在以这种方式进行多次和无意更新的风险,更好的解决方案是添加唯一标识符(Education_ID)并使其成为主键。然后,您可以在更新中使用它,并确保只更新一行。