0

我想插入一行并从过程中返回标识列值!为此,我不想使用任何高级的东西,比如@@identityorSCOPE_IDENTITY等​​,因为我不清楚它们是如何工作的。所以我打算这样做

  1. 锁定一张桌子
  2. 做插入
  3. 返回表的最大值

我熟悉oracle锁

lock table tab1 in exclusive mode;
INSERT INTO tab1.....;
select max(id) into retVal from tab1;

问题:

  1. 我的方法有什么问题吗?
  2. 我如何在 SQL SERVER 中实现这一点?
4

2 回答 2

2

它是哪个版本的sql server?

如果您正在运行 sql server 2008+ (r2 i thing)

最安全的方法是使用插入的输出语句。

像这样 :

插入到客户(姓名、地址、电话)输出中插入。CustomerId 到 @CustomerId 值中(......)

于 2013-10-30T07:20:50.250 回答
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表尚不存在,您就可以这样做。

于 2013-10-30T02:42:00.757 回答