【发布时间】:2015-09-04 20:14:41
【问题描述】:
我创建了一个使用uniqueidentifier 作为主键的SQL Server 表。我将默认值或绑定设置为newid()。 (我想为此列设置 身份规范,但 uniqueidentifier 类型不支持。)
然后我使用 ADO.NET 向此表添加一行。
SqlComment command = new SqlCommand("INSERT INTO [User] (Name) VALUES (@name);
SELECT SCOPE_IDENTITY()", Connection);
command.Parameters.AddWithValue("@name", "Joe Smoe");
Guid userId = (Guid)command.ExecuteScalar();
但是,最后一行失败了,因为 ExecuteScaler() 返回 null。看来,由于uniqueidentifier 不能是表的身份,SCOPE_IDENTITY() 返回null(@@IDENTITY 也是如此)。
好的,那么还有其他方法可以使用 ADO.NET 检索新添加的 ID 吗?
【问题讨论】:
-
这是因为 SCOPE_IDENTITY 返回最后插入的 IDENTITY 值。您的表没有标识,因此 NULL 是唯一可以返回的内容。 guid 变得如此流行的一个原因是您可以在代码中定义它并将其传递给 sql server。我当然希望如果那是您的主键,它不是聚集索引。你也可以看看这篇文章。 blogs.msmvps.com/jcoehoorn/blog/2014/05/12/…
标签: sql-server tsql ado.net