如何在添加SQL列时为每行填充对应现有列的值?
问题:为现有表添加列并同步对应行的值
我有一张包含DateTime类型LastUpdated列的表,想要为其添加LastUpdated2列,并将现有每行的LastUpdated列值填充到对应的LastUpdated2列中。示例如下:
- 原表仅含
LastUpdated列,值分别为12:01 PM、5:00 PM; - 添加列后,每行的
LastUpdated2列值与LastUpdated列完全一致。
我查阅到很多ALTER语句设置默认值的示例,但未找到为每行填充特定对应值的方法。我理想中的代码类似如下伪代码:
ALTER TABLE dbo.Appointments ADD LastUpdated2 DATETIME DEFAULT (SELECT LastUpdated FROM CurrentRow)
想请教是否只能通过先执行ALTER语句添加列,再执行UPDATE语句来实现需求?
回答
没错,你确实需要分两步来实现:
- 先执行
ALTER TABLE语句添加新列:
ALTER TABLE dbo.Appointments ADD LastUpdated2 DATETIME;
- 再执行
UPDATE语句同步现有行的对应值:
UPDATE dbo.Appointments SET LastUpdated2 = LastUpdated;
你设想的那种在ALTER TABLE里直接引用当前行其他列作为默认值的写法是行不通的——SQL的DEFAULT约束仅支持常量、内置函数,或者不依赖表内其他行/列的表达式,没办法直接调用当前行的其他列值来批量填充现有数据。
如果后续需要新插入的行自动同步LastUpdated的值到LastUpdated2,可以给LastUpdated2绑定和LastUpdated相同的默认约束(如果LastUpdated本身有默认设置的话),或者用触发器来实现自动同步逻辑。
内容的提问来源于stack exchange,提问作者CheckpointSoftworks
相关产品推荐
相关产品推荐

