gpt4 book ai didi

c# - 如何不在插入中使用 SCOPE_IDENTITY()

转载 作者:太空宇宙 更新时间:2023-11-03 18:28:45 24 4
gpt4 key购买 nike

我想在插入之前获取新的 id(Identity)。所以,使用这段代码:

select SCOPE_IDENTITY()  AS NewId from tblName

但是得到这个:

1- 空

2- 空

最佳答案

计算列版本

您必须在 sql server 上执行此操作才能添加列。

alter table TableName add Code as (name + cast(id as varchar(200)))

现在您的结果集将始终具有代码作为名称 + id 值,这很好,因为即使字段发生更改(例如名称),此列仍将使用该表达式保持更新。


Entity Framework 选项(不太理想)

您提到您正在使用 Entity Framework。在插入过程中,您需要将 ID 连接到同一记录中的字段上。 SQL(触发器之外)或 Entity Framework 无法一步完成您想要的操作。

你需要做这样的事情:

var obj = new Thing{ field1= "some value", field2 = ""};
context.ThingTable.Add(obj);
context.SaveChanges();
obj.field2 = "bb" + obj.id; //after the first SaveChanges is when your id field would be populated
context.SaveChanges();

原始答案:如果您真的必须向用户显示此值,那么安全的做法是这样的:

begin tran
insert into test(test) values('this is something')
declare @pk int = scope_identity()
print @pk

您现在可以在 @pk 中返回值,让用户确定它是否可以接受。如果是,则发出 COMMIT,否则发出 ROLLBACK 命令。

但这不是一个很好的设计,我认为这是对标识值生成方式的误用。此外,您还应该知道,如果执行回滚,本应使用的 ID 将丢失并且不会再次使用。

关于c# - 如何不在插入中使用 SCOPE_IDENTITY(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27574430/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com