使用GETUTCDATE()与DATEADD生成递增时间失败,所有记录时间相同
问题分析与解决
问题原因
你当前的代码中,每次计算@RecordedTime时,都是基于固定不变的@RecordedTimeConstant加上10秒,而非在上一次生成的时间戳基础上累加。这导致所有记录的时间戳都是同一个值(初始时间+10秒),无法实现递增效果。
修正后的代码
表结构(保持不变)
CREATE TABLE mytable ( sensor_values int, recorded_time datetime );
生成模拟数据的SQL
DECLARE @Counter INT DECLARE @RecordedTime DATETIME DECLARE @RecordedTimeConstant DATETIME -- 初始化基准时间 SET @RecordedTimeConstant = GETUTCDATE() SET @Counter = 1 -- 初始化当前时间为基准时间 SET @RecordedTime = @RecordedTimeConstant /* 生成1000条温度数据,时间戳每次递增10秒 */ WHILE (@Counter <= 1000) BEGIN INSERT INTO [dbo].[mytable] ([sensor_values],[recorded_time]) VALUES (CAST(RAND()*(25-20)+20 AS INT), @RecordedTime) -- 累加10秒,用于下一条记录 SET @RecordedTime = DATEADD(SECOND, 10, @RecordedTime) SET @Counter = @Counter + 1 END -- 重置计数器和时间,生成与温度数据时间戳匹配的湿度数据 SET @Counter = 1 SET @RecordedTime = @RecordedTimeConstant /* 生成1000条湿度数据,时间戳与温度数据一一对应 */ WHILE (@Counter <= 1000) BEGIN INSERT INTO [dbo].[mytable] ([sensor_values],[recorded_time]) VALUES (CAST(RAND()*(42-38)+38 AS INT), @RecordedTime) -- 同样累加10秒 SET @RecordedTime = DATEADD(SECOND, 10, @RecordedTime) SET @Counter = @Counter + 1 END
关键修改点
- 将
@RecordedTime初始化为基准时间,而非每次从固定常量计算 - 每次循环插入后,对
@RecordedTime进行10秒累加,确保下一条记录时间戳递增 - 生成湿度数据时重置
@RecordedTime为基准时间,保证湿度与温度数据的时间戳一一匹配 - 新增
CAST(...) AS INT转换,因为sensor_values是int类型,原代码直接生成的小数会导致插入失败
内容的提问来源于stack exchange,提问作者user14736700
相关产品推荐
相关产品推荐

