如何通过SQL导入向导导入Excel并填充目标表当前日期列?
如何用SQL导入向导导入Excel并自动填充datetime列为当前日期
针对你的需求——清空目标表、导入Excel的Col1-Col4到已有SQL表、为第5个datetime列填充当前日期,这里有两种靠谱的实现方式,操作起来都很简单:
方法一:给datetime列设置默认值(一劳永逸)
这种方法适合后续还要多次导入的场景,设置一次默认约束后,每次导入都自动填充日期:
添加默认值约束
先给你的目标表的datetime列(假设它叫RecordCreateTime,记得替换成你实际的列名)加上默认值,执行这段SQL:ALTER TABLE YourTargetTableName ADD CONSTRAINT DF_RecordCreateTime DEFAULT GETDATE() FOR RecordCreateTime;如果需要UTC时间,把
GETDATE()换成GETUTCDATE()就行,它会取服务器的UTC日期时间。清空目标表
用高效的TRUNCATE清空表(如果表有外键约束,就用DELETE FROM YourTargetTableName;):TRUNCATE TABLE YourTargetTableName;运行SQL导入向导
打开SQL Server导入导出向导,跟着步骤走:- 数据源选
Microsoft Excel,选中你的Excel文件,注意匹配Excel版本(比如.xlsx选对应选项) - 目标选择你的SQL数据库和目标表
- 到列映射步骤时,确认Excel的Col1-Col4和目标表的对应列匹配正确,datetime列不用管——因为有默认值,导入时会自动把当前时间填进去
- 完成导入,所有新行的datetime列都会自动填充导入时刻的服务器时间
- 数据源选
方法二:导入后批量更新(无需修改表结构)
如果你不想改动表的结构,就用这种先导入再更新的方式:
清空目标表
同样执行清空语句:TRUNCATE TABLE YourTargetTableName;导入Excel数据
走导入向导流程,到列映射步骤时,把目标表的datetime列设置为忽略(因为Excel里没有这一列),导入后这一列会是NULL值。批量填充当前日期
导入完成后,执行更新语句,把所有行的datetime列设为当前时间:UPDATE YourTargetTableName SET RecordCreateTime = GETDATE();
小提示
TRUNCATE会重置自增列的种子值,DELETE不会,根据你的表结构选择清空方式。- 导入前确认Excel的列数据类型和目标表对应列一致,避免出现类型转换错误。
- 如果映射时提示列不匹配,手动调整对应关系即可。
内容的提问来源于stack exchange,提问作者jujulalu




