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

Laravel中插入get()查询数据时出现IDENTITY_INSERT关闭错误如何解决

报错原因

你触发错误的核心原因是:L_Examen_Categorie表的id字段被设置为自增标识列,SQL Server默认规则下,IDENTITY_INSERT参数为OFF时,不允许手动插入指定的自增列值。你从P_Examen_Categorie查询返回的结果携带了原表的id字段,直接插入到目标表就会触发该限制。

解决方案

方案1:不保留原表id值(推荐)

绝大多数场景下目标表的自增id不需要和原表保持一致,直接过滤掉id字段再插入即可,还可以优化为批量插入提升性能:

$categorie = DB::table('P_Examen_Categorie as p')
            ->where('p.id_examen', '=', $request->input('id_examen'))
            ->get()
            ->map(function ($item) {
                $insertItem = (array)$item;
                // 移除自增列id
                unset($insertItem['id']);
                return $insertItem;
            })->toArray();

// 批量插入不需要循环
L_Examen_Categorie::insert($categorie);

方案2:需要保留原表id值

如果业务要求目标表的id必须和原表id保持一致,可以临时开启目标表的IDENTITY_INSERT权限,插入完成后记得关闭:

// 开启目标表的自增列手动插入权限
DB::statement('SET IDENTITY_INSERT L_Examen_Categorie ON');

$categorie = DB::table('P_Examen_Categorie as p')
            ->where('p.id_examen', '=', $request->input('id_examen'))
            ->get()
            ->map(fn($item) => (array)$item)
            ->toArray();

L_Examen_Categorie::insert($categorie);

// 插入完成后关闭权限,避免影响后续其他操作
DB::statement('SET IDENTITY_INSERT L_Examen_Categorie OFF');

注意:同一时间SQL Server只允许开启一个表的IDENTITY_INSERT权限,操作完成后必须手动关闭。

内容的提问来源于stack exchange,提问作者drnwork

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 14:57:01