You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 21:22:47