SQL server @@身份问题

时间:2015-07-20 10:59:25

标签: asp.net sql-server

我使用@@Identity在成功插入表格后获取特定行的标识,但有时候除了为特定行创建的内容之外,我还得到其他标识。

示例:

ID    UserName    Age    Location
1     Andy        22     USA
2     Robert      24     Canada
3     James       26     Mexico

从上面的示例中获取用户身份' Robert'其他一些人创造了詹姆斯'我得到了最新的身份,因为' 3'而不是' 2'。

所有这些都发生在ASP.NET网站用户注册中,它为每个连接对象提供最新标识,并且所有注册都使用相同的连接对象。

请有人帮我解决当其他人使用相同的连接对象获取身份时如何获得确切的身份?

如果我使用SCOPE_IDENTITY()进行以下查询,我在转换时会遇到DBNULL异常。

cmd.Connection = conn;
                conn.Open();
                int intStatus = cmd.ExecuteNonQuery();
                if (intStatus == 1)
                {
                    SqlCommand cmd1 = new SqlCommand("Select SCOPE_IDENTITY()", conn);
                    id_package = Convert.ToInt32(cmd1.ExecuteScalar());
                }

4 个答案:

答案 0 :(得分:3)

使用SCOPE_IDENTITY()它将返回会话中生成的最后一个标识值。

@@IDENTITY将在任何会话中返回最后生成的标识值。

此外,如果要插入多行,也可以使用OUTPUT子句来获取会话中所有新生成的标识值。

答案 1 :(得分:1)

使用OUTPUT Clause

INSERT INTO YourTable (UserName, Age, Location)
OUTPUT inserted.ID
VALUES ("Andy", 22, "USA")

如果ID是标识列,则语句将通过此查询返回插入的ID

答案 2 :(得分:0)

我认为您正在寻找SCOPE_IDENTITY()。这将为您提供从查询或会话

生成的标识值

答案 3 :(得分:0)

我对asp.net一无所知,但它至少让我觉得你正在创建一个新的数据库会话来获取身份,这就是为什么你得到空值。您必须在创建行的同一会话中获取它(或使用输出子句)。