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
相关产品推荐
相关产品推荐

