SQL Server了解SCOPE_IDENTITY()

Ghi*_*ita 2 t-sql sql-server

我在存储过程中有这段代码:

BEGIN
    SET @UserId = NULL;
    IF (@Username IS NOT NULL)
    BEGIN
        EXECUTE SP_ADD_USER @Username, @UserId OUTPUT;
    END
    EXECUTE SP_ADD_ALERT @Name, @AlertType, @AlertId OUTPUT;
    INSERT INTO AlertLogs (Datastamp, AlertID, UserID, NotificationMessage) 
        VALUES (@Datastamp, @AlertId, @UserId, @EmailMessage);
    SET @AlertLogId = SCOPE_IDENTITY();
END
Run Code Online (Sandbox Code Playgroud)

@AlertLogId是一个输出参数,我希望将其分配给AlertLogs表中最后一次插入的结果.我必须包括在内吗?

INSERT INTO AlertLogs (Datastamp, AlertID, UserID, NotificationMessage) 
        VALUES (@Datastamp, @AlertId, @UserId, @EmailMessage);
Run Code Online (Sandbox Code Playgroud)

在一个新的块(一个新的开始/结束范围),以便SCOPE_IDENTITY()正常工作?(并且不报告例如在SP_ADD_ALERT例如完成的插入记录的最后一个ID ?)

Cur*_*urt 6

在您的查询中,SCOPE_IDENTITY()将为此范围将最后输入的标识值返回到数据库中.

在这种情况下,AlertLogs如果表具有标识,它将是表的标识.

范围是一个模块:存储过程,触发器,函数或批处理.因此,如果两个语句在同一存储过程,函数或批处理中,则它们在同一范围内.

http://msdn.microsoft.com/en-us/library/ms190315.aspx