Sql server 如何创建唯一的会话id(与SSPID不同)

Sql server 如何创建唯一的会话id(与SSPID不同),sql-server,sql-server-2008-r2,Sql Server,Sql Server 2008 R2,我想知道如何获取或创建一个在数据库中永远唯一的会话id @SSPID不是唯一的。有人注销后会重新使用它。声誉不足,这就是为什么这是一个答案而不是评论 您可以使用SPID+GETDATE()来获取唯一的可识别会话,即使在几年后也是如此。您可以使用登录触发器生成唯一的id并插入到表中。然后,您的应用程序可以检索此ID以供使用 CREATE TABLE session_audit ( uid uniqueidentifier not null,

我想知道如何获取或创建一个在数据库中永远唯一的会话id


@SSPID
不是唯一的。有人注销后会重新使用它。

声誉不足,这就是为什么这是一个答案而不是评论


您可以使用SPID+GETDATE()来获取唯一的可识别会话,即使在几年后也是如此。

您可以使用登录触发器生成唯一的id并插入到表中。然后,您的应用程序可以检索此ID以供使用

    CREATE TABLE session_audit
    (
        uid     uniqueidentifier not null,
        login_name  varchar(100),
        login_dt    datetime,
        session_id  smallint,
        hostname    nvarchar(128),
        constraint pk_session_audit primary key (uid)
    )

CREATE  TRIGGER session_audit_trigger
ON ALL SERVER FOR LOGON
AS 
BEGIN
    IF  SUSER_SNAME() not in ('sa') -- do not log for sa
    BEGIN
    INSERT INTO Test.dbo.session_audit (uid, login_name, login_dt, session_id, hostname) 
    SELECT NEWID(), SUSER_SNAME(), GETDATE(), @@SPID, HOST_NAME();
    END
END;
GO
ENABLE TRIGGER session_audit_trigger ON ALL SERVER;

你需要它做什么?GUID是创建被认为是“唯一”的东西的常用方法@AllanS.Hansen如何在登录时获取GUID?使用数据库触发器?我们的想法是要有一个唯一的ID,可以用来记录各种用户操作。您想要一个持久的ID,还是每次会话都要更改?@Squirrel persistent。每一个会话都应该是可识别的,即使在几年后也是如此。那么如何识别这个登录会话是相同的还是新的登录会话?但是我如何创建它呢?我如何在一节课中保持不变?唯一的ID需要在登录期间创建,然后在整个会话期间保持相同。如果我再次调用
GetDate()
,它当然会改变。只在登录时创建唯一ID。为什么要为同一会话再次调用
GETDATE()
?好的,假设我在登录时创建了ID。然后稍后,我需要它在一些更新触发器中。或在其他程序中。我现在怎样才能再次获得相同的身份证?好的。在表中插入此唯一ID,即会话的SPID。只有在相应会话有效之前,此表才会有所有唯一ID的列表。会议结束后,删除记录。谢谢(无法投票,需要15次)。这就是我要找的方向。