SQL插入具有不同的sysdate值

时间:2013-04-11 07:32:08

标签: sql insert vertica sysdate

我正在做这样的插入:

INSERT INTO TABLE 
(
 ID, 
 SOURCE_ID, 
 DATE_FIELD
) 
SELECT 
 ID,
 *,
 SYSDATE
FROM 
(
 AN SQL QUERY
);

当我单独运行SELECT部分​​时,我得到这样的值:

1, 1234, 11.04.2013 15:00:00
1, 1235, 11.04.2013 15:00:00
1, 1236, 11.04.2013 15:00:00
1, 1237, 11.04.2013 15:00:00
1, 1238, 11.04.2013 15:00:00

这是我要插入的内容。

但在运行整个插入后,我得到这样的值:

1, 1234, 11.04.2013 15:00:01
1, 1235, 11.04.2013 15:00:02
1, 1236, 11.04.2013 15:00:03
1, 1237, 11.04.2013 15:00:04
1, 1238, 11.04.2013 15:00:05

有谁知道为什么sysdate会以这种方式运行以及什么是一个好的解决方法?

3 个答案:

答案 0 :(得分:2)

我不知道为什么sysdate表现得那样,但解决方法是

DECLARE @now datetime
SELECT @now = SYSDATE

INSERT INTO TABLE 
(
 ID, 
 SOURCE_ID, 
 DATE_FIELD
) 
SELECT 
 ID,
 *,
 @now
FROM 
(
 AN SQL QUERY
);

答案 1 :(得分:1)

至少根据6.1文档,每个日期/时间函数应该为给定的事务提供相同的时间戳。因此,如果您得到不同的结果,我会假设从派生表中提取数据一次只发生一次。

尝试将sysdate放入派生表中,看看是否能解决您的问题。

答案 2 :(得分:1)

这并不能解释为什么SYSDATE没有返回你期望的内容(实际上,根据文档它应该是稳定的),但也许你可以使用NOW()代替?

SYSDATE将始终在一个语句中返回相同的值,NOW()将始终在事务内返回相同的值。也许在后台INSERT .. SELECT被分成多个语句(这会让我感到惊讶,但这符合你看到的行为)。