SQL Server : get the row Identity

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

谢谢。

最佳答案

您可以在这两个语句中使用 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;

关于SQL Server : get the row Identity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25466736/

相关文章:

sql-server - 这个 OpenXML 有什么问题?

sql - 不可变的 SQL 列

sql - 空结果集的聚合

sql-server - 无法截断表,因为它被 FOREIGN KEY 约束引用?

sql - 确定服务器产品版本并相应地执行 SQL 的最佳方法?

sql - SSDT 项目发布在 PostDeploy 中的 unicode 上失败 - 有任何解决方法或配置来解决此问题吗?

c# - .Net SQL Server DDL API

sql - 如何在TSQL中针对列值而不是参数测试XML属性?

mysql - 做两个 SELECT 查询,第二个查询依赖于第一个,第二个的结果连接在一个中

c# - Connectionstring 没有从 dbconnection 传递到 dbfactory?