Sql 在另一个用户';s插入

Sql 在另一个用户';s插入,sql,sql-server,visual-studio,Sql,Sql Server,Visual Studio,在多用户系统上工作时,如果其他用户在我插入一行后立即插入,下面的代码是否有可能获取id值 INSERT INTO table (ross) VALUES('whatever'); SELECT SCOPE_IDENTITY; 如果是这样,我是否可以保证用户从他/她刚刚输入的记录中获取id?不要使用SCOPE\u IDENTITY或任何其他单值机制 使用: 注: 这适用于插入任意数量的行 这保证您只获取语句实际插入的行的值 即使在表上定义了触发器,也可以这样做 您可以将放入中,只需获取从插

在多用户系统上工作时,如果其他用户在我插入一行后立即插入,下面的代码是否有可能获取id值

INSERT INTO table (ross) 
VALUES('whatever');

SELECT SCOPE_IDENTITY;

如果是这样,我是否可以保证用户从他/她刚刚输入的记录中获取id?

不要使用
SCOPE\u IDENTITY
或任何其他单值机制

使用:

注:

  • 这适用于插入任意数量的行
  • 这保证您只获取语句实际插入的行的值
  • 即使在表上定义了触发器,也可以这样做
  • 您可以将
    放入
    中,只需获取从
    插入
    返回的结果即可

不要使用
范围标识
或任何其他单值机制

使用:

注:

  • 这适用于插入任意数量的行
  • 这保证您只获取语句实际插入的行的值
  • 即使在表上定义了触发器,也可以这样做
  • 您可以将
    放入
    中,只需获取从
    插入
    返回的结果即可

我添加了sql server标记,因为问题似乎是关于sql server的。否范围标识仅限于您的范围,例如您的事务和与sql server的连接。它不受其他连接/用户在同一个表中插入值的影响。我添加了sql server标记,因为问题似乎与sql server有关。否SCOPE\u标识仅限于您的范围-例如,您的事务和与sql server的连接。它不受其他连接/用户在同一个表中插入值的影响。对于单例插入,scope_identity工作得很好,而且多年来一直如此。@Smor。否决票意味着这个答案是错误的。这似乎完全没有道理<代码>输出是执行OP所需操作的最安全的方法——它在所有情况下都有效。投票决定答案是因为scope_标识完全不受影响,而不是插入触发器。对于单例插入,scope_标识工作得很好,并且已经工作了多年。@Smor。否决票意味着这个答案是错误的。这似乎完全没有道理<代码>输出是执行OP所需操作的最安全的方法——它在所有情况下都有效。向上投票是因为使用而不是插入触发器时,作用域标识完全不受影响
DECLARE @ids TABLE (id int);

INSERT INTO table (ross)
    OUTPUT inserted.id INTO @ids  -- use correct column name
    VALUES ('whatever');

SELECT *
FROM ids;