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

如何为SQL Server现有表添加列并同时填充数据

给SQL Server现有表添加带默认值列的测试总结

刚好解决了这个困扰的问题,我测试了几种不同的语法,整理下对应的效果:

首先说最开始遇到的情况:当执行ALTER TABLE LanguagePacks ADD LgDt DATETIME DEFAULT GETDATE()时,现有行的新列会是NULL,只有后续INSERT的新行才会自动填充GETDATE()的默认值——这是因为普通的DEFAULT子句不会触发对现有行的赋值操作。

下面是我实际测试的几种语句和结果:

  • 允许为NULL + 普通DEFAULT(无WITH VALUES)

    ALTER TABLE ##LangPak ADD LtDt2 DATETIME DEFAULT GETDATE()
    

    结果:现有行的LtDt2字段为NULL,新插入的行自动填充执行INSERT时的当前时间。

  • 允许为NULL + DEFAULT WITH VALUES

    ALTER TABLE ##LangPak ADD LtDt4 DATETIME NULL DEFAULT GETDATE() WITH VALUES
    

    结果:现有行的LtDt4会被设置为执行这条ALTER语句时的当前时间,新插入行同样会自动使用默认值填充。

  • NOT NULL + DEFAULT

    ALTER TABLE ##LangPak ADD LtDt DATETIME NOT NULL DEFAULT GETDATE()
    

    结果:因为列不允许为NULL,SQL Server会自动用默认值填充所有现有行的LtDt字段,新插入行也会自动使用默认值,这里不需要额外加WITH VALUES。

  • 直接添加NOT NULL列(无DEFAULT)

    ALTER TABLE ##LangPak ADD LtDt1 DATETIME NOT NULL
    

    结果:触发报错Msg 4901,因为现有行没有值可以填充这个非空列,SQL Server不允许这种操作,必须搭配默认值,或者先设为NULL填充数据后再修改约束。


感谢各位的解答,这些方法都已经生效,尝试了所有建议收获颇丰。由于该问题被标记为重复,我无法将此编辑内容发布为答案,所以整理在这里分享给大家。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:46:12