如何在SQL Server中更新System_Timestamp类型字段的值
解决方案
首先需要澄清SQL Server的字段类型规则:
- SQL Server中的
timestamp(官方已更名为rowversion)是系统自动维护的二进制行版本标识,不存储实际的时间数据,也不支持手动修改值。你给出的示例数据是标准时间格式,说明你的字段实际应该是datetime2/datetime/smalldatetime这类时间类型,大概率是和Oracle的timestamp类型混淆了。
如果你确认字段是时间类型,要把所有值固定修改为2021-01-01,直接执行赋值语句即可:
UPDATE tableA SET T_SYSTEM_TIMESTAMP = '2021-01-01';
如果后续需要对时间类型做加减天数的操作,SQL Server不支持直接加减数字,需要用DATEADD函数,比如你之前想减30天的写法是:
UPDATE tableA SET T_SYSTEM_TIMESTAMP = DATEADD(DAY, -30, T_SYSTEM_TIMESTAMP);
注意事项
全表更新操作建议先开启事务验证结果,避免误改无法回滚:
BEGIN TRANSACTION; -- 执行更新语句 UPDATE tableA SET T_SYSTEM_TIMESTAMP = '2021-01-01'; -- 先查询确认修改结果是否符合预期 SELECT * FROM tableA; -- 确认无误再提交,有问题执行ROLLBACK TRANSACTION回滚 COMMIT TRANSACTION;
如果确实字段是原生的timestamp类型,你可以先执行以下语句确认字段类型:
SELECT DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'tableA' AND COLUMN_NAME = 'T_SYSTEM_TIMESTAMP';
这类timestamp字段无法手动修改值,且本身不存储时间数据,你需要调整表结构改用时间类型字段存储时间信息。
内容的提问来源于stack exchange,提问作者Zurf
相关产品推荐
相关产品推荐

