SQL Server:获取行标识

时间:2014-08-23 21:56:47

标签: sql sql-server

我将此作为存储过程的第一部分:

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设置为插入或更新的行的标识?我需要稍后在存储过程中使用该值。

感谢。

2 个答案:

答案 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子句)来获取您要查找的值。 这也将消除检查是否存在以及更新或插入的需要。