0

如果 date_start (type datetime) 在过去并且 date_start+duration(type; real) (获取结束日期。) 在未来,我试图插入一行。我不断收到“从子查询返回的多个结果”。

IF  (CAST(CONVERT(datetime,(SELECT date_start FROM [tableA])) as float)- CAST(CONVERT(datetime,CURRENT_TIMESTAMP) as float))<0 
AND 
(24*(CAST(CONVERT(datetime, (SELECT date_start FROM [tableA])) as float)- CAST(CONVERT(datetime,CURRENT_TIMESTAMP) as float)) + (SELECT duration FROM [tableA]))>0
BEGIN
        INSERT INTO [tableB](col1) 
    select 24*(CAST(CONVERT(datetime,date_start) as float)- CAST(CONVERT(datetime,CURRENT_TIMESTAMP) as float))  FROM [tableA]
END

知道我该怎么做吗?

4

3 回答 3

1

那是因为这个:

SELECT duration FROM [tableA]

我很确定基于您需要过滤的错误,以便返回一行。

于 2013-08-06T15:32:09.450 回答
1

@Fearghal 你应该试试这个 -

DECLARE @required_date DATETIME
DECLARE @duration REAL

DECLARE date_cursor CURSOR FOR
SELECT date_start, duration FROM [tableA]

OPEN date_cursor
FETCH NEXT FROM date_cursor
INTO @required_date, @duration 
WHILE @@FETCH_STATUS = 0
BEGIN
    IF  (CAST(@required_date as float)- CAST(CONVERT(datetime,CURRENT_TIMESTAMP) as    float))<0 
AND 
(24*(CAST(@required_date as float)- CAST(CONVERT(datetime,CURRENT_TIMESTAMP) as float)) + @duration)>0
    BEGIN
         INSERT INTO [tableB](col1) 
         select 24*(CAST(CONVERT(datetime,date_start) as float)- CAST(CONVERT(datetime,CURRENT_TIMESTAMP) as float))  FROM [KAP_db_C4].[dbo].[PM]
    END
FETCH NEXT FROM date_cursor
INTO @required_date, @duration
END
CLOSE date_cursor
DEALLOCATE date_cursor
于 2013-08-06T16:35:54.490 回答
0

好的,我想我明白了....如果我错了,请纠正我,但不需要光标和变量的东西。我结束了这个。我不能和你一起做,干杯

INSERT INTO [TABLEB](col1,........, col6) 
         select 24*(CAST(CONVERT(datetime,date_start) as float)- CAST(CONVERT(datetime,CURRENT_TIMESTAMP) as float)), ENTITY, 'PM', NULL, NULL, NULL, NULL, '0'  FROM [TABLEA] 
            where (CAST(CONVERT(datetime,date_start) as float)- CAST(CONVERT(datetime,CURRENT_TIMESTAMP) as float))<0 
            AND 
            (24*(CAST(CONVERT(datetime,date_start) as float)- CAST(CONVERT(datetime,CURRENT_TIMESTAMP) as float)) + duration)>0
于 2013-08-07T11:02:31.223 回答