如何获取SQL插入数据后生成的IDTemplate值(C# Web API场景)
获取插入SQL Server数据后的自增ID(IDTemplate)
针对你的场景,有几种可靠的方法能拿到生成的IDTemplate值,下面是具体实现:
方法1:使用SQL的OUTPUT子句
直接在INSERT语句中返回生成的自增ID,无需额外执行查询,是最直接的方式:
修改后的SQL语句:
INSERT INTO [dbo].[TB_Templates] ([DescTemplate], [Template], [User]) OUTPUT inserted.IDTemplate VALUES ('teste', 'teste', 'teste')
C# Web API执行代码:
using (var connection = new SqlConnection("你的数据库连接字符串")) { connection.Open(); var sql = @"INSERT INTO [dbo].[TB_Templates] ([DescTemplate], [Template], [User]) OUTPUT inserted.IDTemplate VALUES (@DescTemplate, @Template, @User)"; using (var command = new SqlCommand(sql, connection)) { // 添加参数避免SQL注入 command.Parameters.AddWithValue("@DescTemplate", "teste"); command.Parameters.AddWithValue("@Template", "teste"); command.Parameters.AddWithValue("@User", "teste"); // 执行并获取生成的ID int generatedId = (int)command.ExecuteScalar(); // 后续用generatedId进行操作 } }
方法2:使用SCOPE_IDENTITY()函数
在同一个数据库连接/事务中,插入数据后立即查询当前会话生成的最后一个自增ID:
组合SQL脚本:
INSERT INTO [dbo].[TB_Templates] ([DescTemplate], [Template], [User]) VALUES ('teste', 'teste', 'teste'); SELECT SCOPE_IDENTITY();
C# Web API执行代码:
using (var connection = new SqlConnection("你的数据库连接字符串")) { connection.Open(); var sql = @"INSERT INTO [dbo].[TB_Templates] ([DescTemplate], [Template], [User]) VALUES (@DescTemplate, @Template, @User); SELECT SCOPE_IDENTITY();"; using (var command = new SqlCommand(sql, connection)) { command.Parameters.AddWithValue("@DescTemplate", "teste"); command.Parameters.AddWithValue("@Template", "teste"); command.Parameters.AddWithValue("@User", "teste"); int generatedId = Convert.ToInt32(command.ExecuteScalar()); // 后续操作 } }
注意:
SCOPE_IDENTITY()仅返回当前会话、当前作用域内生成的自增ID,比@@IDENTITY更安全,不会获取到其他会话的ID值。
方法3:使用Entity Framework(EF Core)
如果你的Web API用EF Core操作数据库,无需手动编写SQL,实体的自增ID会在保存后自动填充:
// 假设存在对应的实体类TB_Template var template = new TB_Template { DescTemplate = "teste", Template = "teste", User = "teste" }; using (var context = new YourDbContext()) { context.TB_Templates.Add(template); context.SaveChanges(); // 此时template.IDTemplate已被赋值为生成的自增ID int generatedId = template.IDTemplate; }
内容的提问来源于stack exchange,提问作者Marcelo Bittar
相关产品推荐
相关产品推荐

