我在存储过程中有这段代码:
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 ?)
在您的查询中,SCOPE_IDENTITY()将为此范围将最后输入的标识值返回到数据库中.
在这种情况下,AlertLogs如果表具有标识,它将是表的标识.
范围是一个模块:存储过程,触发器,函数或批处理.因此,如果两个语句在同一存储过程,函数或批处理中,则它们在同一范围内.
http://msdn.microsoft.com/en-us/library/ms190315.aspx
| 归档时间: |
|
| 查看次数: |
13638 次 |
| 最近记录: |