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

SQL Server中自动填充Date_Inserted与Unique_ID列的插入报错问题

问题解决步骤

1. 修正建表语句的语法错误

你的建表语句中[V05_V] [real] NULL后缺少逗号,这会导致建表失败,先补上:

USE [db_db]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[my_table](
    [V01_V] [real] NULL,
    [V02_V] [real] NULL,
    [V03_V] [real] NULL,
    [V04_V] [real] NULL,
    [V05_V] [real] NULL, -- 补上缺失的逗号
    [Date_Inserted] [datetime] NOT NULL,
    [Unique_ID] [int] IDENTITY(1,1) NOT NULL,
    CONSTRAINT [PK_row_id] PRIMARY KEY CLUSTERED
(
    [Unique_ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO

2. 实现Date_Inserted自动填充

Date_Inserted是非空类型,要自动填充有两种方案:

方案一:给Date_Inserted添加默认约束

如果希望插入时自动记录当前时间,执行以下语句添加默认值:

ALTER TABLE [dbo].[my_table]
ADD CONSTRAINT DF_my_table_DateInserted DEFAULT GETDATE() FOR [Date_Inserted];
GO

方案二:插入时显式指定默认值

若不想修改表结构,可在插入语句中用DEFAULT关键字指定该列值。

3. 修改INSERT语句解决列数不匹配问题

报错核心原因是未指定目标列,数据库会按表的列顺序匹配SELECT结果,但你的SELECT只有5列,表有7列,导致不匹配。修改INSERT语句,明确指定要插入的列,自增列Unique_ID无需指定,数据库会自动生成:

对应方案一(已加默认约束)的INSERT语句

INSERT INTO dbo.my_table (V01_V, V02_V, V03_V, V04_V, V05_V)
SELECT DISTINCT 
  mot.V01_V,
  mot.V02_V,
  mot.V03_V,
  mot.V04_V,
  mot.V05_V
FROM dbo.my_other_table mot -- 修正原语句中表名的多余空格

对应方案二(未加默认约束)的INSERT语句

INSERT INTO dbo.my_table (V01_V, V02_V, V03_V, V04_V, V05_V, Date_Inserted)
SELECT DISTINCT 
  mot.V01_V,
  mot.V02_V,
  mot.V03_V,
  mot.V04_V,
  mot.V05_V,
  DEFAULT -- 显式指定使用默认值
FROM dbo.my_other_table mot

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 18:13:13