我想插入一行并从过程中返回标识列值!为此,我不想使用@@identity
或SCOPE_IDENTITY
等高级内容,因为我没有清楚了解它们的工作原理。
所以我打算这样做
我熟悉oracle lock
lock table tab1 in exclusive mode;
INSERT INTO tab1.....;
select max(id) into retVal from tab1;
问题:
答案 0 :(得分:2)
它是哪个版本的sql server?
如果您正在运行sql server 2008+(r2 i thing)
最安全的方法是使用插入的输出语句。
像这样:
插入客户(姓名,地址,电话) 输出inserted.CustomerId到@CustomerId 价值观(......)
答案 1 :(得分:1)
通过强制锁定数据库/表,您将创建的问题多于解决问题。让数据库管理系统(DBMS)管理数据库。
您需要做的就是:
BEGIN TRANSACTION --added after original answer
INSERT INTO tab1....;
SELECT @@identity AS [last_id] INTO retVal;
END TRANSACTION --added after original answer
我相信您知道只要SELECT...INTO retVal
表尚不存在,您就只能retVal
。