SQL Server:获取行标识
我将此作为存储过程的第一部分:SQL Server:获取行标识,sql,sql-server,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, Created
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
如何将@\u id
设置为正在插入或更新的行的标识?我需要该值以便稍后在存储过程中使用
谢谢。根据您使用的SQL Server版本,您可以使用include the OUTPUT子句来获取您要查找的值。
这也将消除检查是否存在以及更新或插入的需要。您可以在这两个语句中使用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;
需要在2005年得到支持。有没有不使用MERGE的方法可以做到这一点?您可以在更新之后和INSERT语句之后立即使用SELECT@\u id=SCOPE\u IDENTITY()。将inserted.id输出到@id\u Table(id)中会给我提供无效的列名“id”。使用
inserted。[您的_IDENTITY\u column\u name]
而不仅仅是id
,我仅用于演示目的