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

如何在MS SQL中向标识列插入数据?代码报错求助

问题分析

你碰到的是两个关联问题:

  1. 语法错误:VALUES()里没有填任何值,SQL Server的语法规则不允许这种空值列表,这就是抛出Incorrect syntax near ')'的直接原因。
  2. 标识列限制:id是IDENTITY(1,1)类型的列,默认情况下SQL Server不允许你手动往标识列插入值,必须先开启特定设置才能操作。

解决方案

根据你的实际需求,分两种场景处理:

场景1:不需要手动指定ID,让SQL自动生成

如果只是想插入一条记录,让SQL Server按IDENTITY(1,1)的规则自动生成ID,那完全不需要在INSERT语句里写id列,直接用默认值插入或者指定其他列即可:

// 当表中只有id列时,用DEFAULT VALUES插入空记录,SQL会自动生成ID
SqlCommand writeCommand = new SqlCommand("INSERT INTO computers DEFAULT VALUES", conn.GetConnection());
writeCommand.ExecuteNonQuery();

// 如果表中有其他列,直接插入其他列的值即可,id会自动生成
// SqlCommand writeCommand = new SqlCommand("INSERT INTO computers (device_name, purchase_date) VALUES ('办公台式机', '2024-05-20')", conn.GetConnection());

场景2:必须手动插入指定的ID值到标识列

如果确实需要往标识列里插入自定义的ID,那必须先开启IDENTITY_INSERT开关,插入完成后再关闭它(避免影响后续对该表的操作)。示例代码如下:

using (var connection = conn.GetConnection())
{
    connection.Open();
    
    // 第一步:开启IDENTITY_INSERT,允许手动插入标识列的值
    using (var enableCmd = new SqlCommand("SET IDENTITY_INSERT computers ON", connection))
    {
        enableCmd.ExecuteNonQuery();
    }
    
    // 第二步:执行插入,务必指定id列和对应的值(用参数化查询避免SQL注入)
    using (var writeCommand = new SqlCommand("INSERT INTO computers(id) VALUES(@customId)", connection))
    {
        // 替换成你需要插入的具体ID数值
        writeCommand.Parameters.AddWithValue("@customId", 1005);
        writeCommand.ExecuteNonQuery();
    }
    
    // 第三步:关闭IDENTITY_INSERT,恢复默认的自动生成规则
    using (var disableCmd = new SqlCommand("SET IDENTITY_INSERT computers OFF", connection))
    {
        disableCmd.ExecuteNonQuery();
    }
}

注意事项

  • 开启IDENTITY_INSERT后,插入时必须显式写出标识列的列名,不能省略。
  • 插入的ID值不能和表中已有的标识值重复,否则会抛出主键冲突的异常。
  • 一定要记得关闭IDENTITY_INSERT,否则后续对该表的插入操作可能会报错。

内容的提问来源于stack exchange,提问作者Vavřinec Kubíček

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 14:33:16