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

如何在INSERT INTO SELECT语句中为插入数据设置默认值?

问题根源

你当前的写法不生效有两个核心原因:

  1. 执行insert into #Resultt select * from #Result时,SQL会按列的物理顺序对应赋值:目标表第一列是case_status,源表第一列是pk_id,相当于直接把源表的主键值塞到了case_status列,自然不会触发你设置的默认值,其余列的对应也完全错位。
  2. 目标表的pk_id带有IDENTITY属性,默认禁止手动插入指定值,如果需要保留源表的pk_id数值,需要先开启对应权限。

正确实现方案

方案1:使用已设置的case_status默认值

如果你要保留表结构里的DEFAULT 1配置,只需指定插入列,跳过case_status即可触发默认值,同时处理IDENTITY列的插入权限:

-- 开启目标表IDENTITY列手动插入权限
SET IDENTITY_INSERT #Resultt ON;

-- 明确指定插入的列,不包含case_status,会自动填充默认值1
INSERT INTO #Resultt (pk_id, fk_customer_id, fk_vehicle_id, relation_type, end_date)
SELECT pk_id, fk_customer_id, fk_vehicle_id, relation_type, end_date FROM #Result;

-- 用完关闭权限
SET IDENTITY_INSERT #Resultt OFF;

方案2:显式指定case_status固定值

如果不想依赖默认值配置,或者后续需要灵活修改这个固定值,可以直接在查询语句里加常量1:

SET IDENTITY_INSERT #Resultt ON;

INSERT INTO #Resultt (case_status, pk_id, fk_customer_id, fk_vehicle_id, relation_type, end_date)
SELECT 1 AS case_status, pk_id, fk_customer_id, fk_vehicle_id, relation_type, end_date FROM #Result;

SET IDENTITY_INSERT #Resultt OFF;

可选:不需要保留源表pk_id的简化写法

如果目标表的pk_id不需要和源表一致,允许目标表自行生成IDENTITY值,可以不用处理IDENTITY_INSERT权限,写法更简单:

INSERT INTO #Resultt (case_status, fk_customer_id, fk_vehicle_id, relation_type, end_date)
SELECT 1, fk_customer_id, fk_vehicle_id, relation_type, end_date FROM #Result;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 11:24:05