我不确定在存储过程中先插入后进行更新的正确方法。
$(document).ready(function($) {
$('#as-member').click(function(e){
$('.members-section:not(.test-member)').not(this).toggleClass('unselected');
// here -----------^^^^^^^^^^^^^^^^^^^^-----------------
});
});
答案 0 :(得分:4)
对当前代码进行简单的更改就可以为您提供所需的内容。
不必搞乱@@Identity
(这几乎从来都不是正确的事),您只需计算一次@Id
值的哈希,将其存储在局部变量中,然后将其用于两个{{ 1}}语句和insert
语句的where
子句-也就是说,假设update
列是唯一的。
话虽这么说,但我不确定为什么需要HashId
列和rowId
列-除非其中之一旨在通过生命周期中的update语句更改其值的行-您只是保留冗余数据。
这是存储过程的改进版本:
incId
答案 1 :(得分:2)
有一个很棒的关键字OUTPUT
。 As MSDN says:
从受影响的每一行返回信息或基于表达式的信息 通过INSERT,UPDATE,DELETE或MERGE语句。这些结果可以是 返回到处理应用程序以用于诸如 确认消息,归档和其他此类应用程序 要求。结果也可以插入表或表中 变量。另外,您可以捕获输出的结果 嵌套INSERT,UPDATE,DELETE或MERGE语句中的子句,以及 将这些结果插入目标表或视图中。
您可以通过OUTPUT
关键字将插入的ID插入表中。例如:
DECLARE @InsertedIDs TABLE (ID varbinary(8000))
INSERT INTO empTable(
LastName,
FirstName,
hash_id
)
OUTPUT HashBytes('SHA2_256', cast(INSERTED.ID as varbinary(50))) INTO @InsertedIDs(ID)
VALUES(
@lastName,
@firstName,
HashBytes('SHA2_256', cast(@id as varbinary(50)))
)
UPDATE empTable
Set rowId = incId -- both are columns in empTable
WHERE hash_id in (SELECT ID IN @InsertedIDs)