我正在使用Azure SQL并拥有一个客户端服务,每30分钟记录一次用户的位置和数据。它将这些数据从客户端上传到数据库,但我收到了错误。
我有这个存储过程:
INSERT INTO ThisIsMyTable(UserID, Latitude, Longitude)
VALUES (@UserID, @Latitude, @Longitude)
但是当同一个用户的客户端使用相同的UserID
上传数据时,我收到以下错误:
违反PRIMARY KEY约束'PrimaryKey_asdad'。无法在对象'dbo.ThisIsMyTable'中插入重复键。重复键值 是(TheUsersUserID)。声明已经终止。
如何更改存储过程并检查密钥是否已存在,如果是,请更新lat / lon ..或者删除行并创建新行更好?
尼尔斯
答案 0 :(得分:2)
MERGE INTO ThisIsMyTable AS Target
USING (VALUES (@UserID,@Latitude, @Longitude)
AS Source (UserID, Lat, Long)
ON Target.UserID = Source.UserID
WHEN MATCHED THEN
UPDATE SET Latitude = Source.Lat, Longitude=Source.Long
WHEN NOT MATCHED BY TARGET THEN
INSERT (UserID, Latitude, Longitude) VALUES (UserID, Lat, Long)
答案 1 :(得分:2)
if exists (select 1 from ThisIsMyTable where UserID = @UserID)
update ThisIsMyTable
set latitude = @latitude, longitude = @longitude
where UserID = @UserID
else
INSERT INTO ThisIsMyTable (UserID, Latitude, Longitude)
VALUES (@UserID, @Latitude, @Longitude)
答案 2 :(得分:0)
您可以在SQL中合并语句,更多详细信息请参见:https://msdn.microsoft.com/en-us/library/bb510625.aspx