我使用@@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());
}
答案 0 :(得分:3)
使用SCOPE_IDENTITY()
它将返回会话中生成的最后一个标识值。
@@IDENTITY
将在任何会话中返回最后生成的标识值。
此外,如果要插入多行,也可以使用OUTPUT
子句来获取会话中所有新生成的标识值。
答案 1 :(得分:1)
INSERT INTO YourTable (UserName, Age, Location)
OUTPUT inserted.ID
VALUES ("Andy", 22, "USA")
如果ID
是标识列,则语句将通过此查询返回插入的ID
答案 2 :(得分:0)
我认为您正在寻找SCOPE_IDENTITY()
。这将为您提供从查询或会话
答案 3 :(得分:0)
我对asp.net一无所知,但它至少让我觉得你正在创建一个新的数据库会话来获取身份,这就是为什么你得到空值。您必须在创建行的同一会话中获取它(或使用输出子句)。