我将此作为存储过程的第一部分:
DECLARE @_id as int
if exists(select 1 from JTrack_Visitors WHERE cookie = @cookie)
begin
UPDATE JTrack_Visitors
SET LastSeen = @_now
WHERE cookie = @cookie
end
else
begin
INSERT INTO JTrack_Visitors(Cookie, CreatedOn, LastSeen)
VALUES (@cookie, @_now, @_now)
end
如何将@_id
设置为插入或更新的行的标识?我需要稍后在存储过程中使用该值。
感谢。
答案 0 :(得分:3)
您可以在两个语句中使用OUTPUT子句,在任何情况下都填充表变量,然后从该表变量中检索值。
DECLARE @_id as int;
DECLARE @ID_Table TABLE(ID INT);
IF EXISTS (select 1 from JTrack_Visitors WHERE cookie = @cookie)
BEGIN
UPDATE JTrack_Visitors
SET LastSeen = @_now
OUTPUT inserted.ID INTO @ID_Table(ID)
WHERE cookie = @cookie
END
ELSE
BEGIN
INSERT INTO JTrack_Visitors(Cookie,CreatedOn,LastSeen)
OUTPUT inserted.ID INTO @ID_Table(ID)
VALUES (@cookie,@_now,@_now)
END
SELECT @_id = ID FROM @ID_Table;
答案 1 :(得分:-1)
根据您使用的SQL Server版本,您可以使用MERGE statement(包括OUTPUT子句)来获取您要查找的值。 这也将消除检查是否存在以及更新或插入的需要。