0

我如何从下面的逻辑中获得结果,我想将其放入存储过程中,并计算原始行将被分成多少行的循环。因此,给定的行最终可能最终被计算为三个新行......或没有行......或一个。所以我需要一个柜台和一种方法来把它从诱惑中拿出来,放到一张真正的桌子上。我已经尝试更新临时表并在今天工作了几个小时,但没有运气。我已经尝试将我所有的 id 插入到临时表中。我只是不熟悉如何做到这一点,今天已经研究了很多。帮助表示赞赏:

declare @StartTime time
declare @EndTime time
declare @Temp_StartTime time

declare @temp_StartHour int
declare @temp_EndHour int
declare @temp_StartMinute int
declare @temp_EndMinute int

SET @StartTime='2:30:00'
SET @EndTime='4:01:00'
SET @Temp_StartTime=@StartTime

SET @temp_StartHour=DATEPART(HOUR, @StartTime)
SET @temp_EndHour=DATEPART(HOUR, @EndTime)
SET @temp_StartMinute=DATEPART(MI, @StartTime)
SET @temp_EndMinute=DATEPART(MI, @EndTime)

if(@temp_EndMinute>0)
    BEGIN
        SET @temp_EndHour=@temp_EndHour+1
    END

DECLARE @Temp_Table TABLE
(
  StartHour int,
  StartMinute int,
  EndHour int,
  EndMinute int,
  StartTime time,
  EndTime time
)

WHile((@temp_EndHour-@temp_StartHour>=1))
    BEGIN
        INSERT INTO @Temp_Table
        SELECT (DATEPART(HOUR, @Temp_StartTime)) AS StartHour,(DATEPART(MINUTE, @Temp_StartTime)) AS StartMinute,
        @temp_StartHour+1 AS EndHour, 
        0 AS EndMinute, @StartTime as StartTime, @EndTime as EndTime

        SET @temp_StartHour=@temp_StartHour+1
        SET @Temp_StartTime=DATEADD(HOUR,1,@Temp_StartTime)

        if(DATEPART(MI, @Temp_StartTime)!=0)
            BEGIN
                SET @Temp_StartTime=DATEADD(MI,-@temp_StartMinute,@Temp_StartTime)
            END
    END

--here's where it all goes horribly wrong
SELECT * INTO newTable FROM @Temp_Table

更多信息:

答案可以在我之前提出的问题中找到。我开始了这个问题的缩小版,因为我认为我发布了太多信息,以至于有人找不到帮助我的观点。但这并不完全正确,因为我从另一个用户那里得到了很好的回答。

4

1 回答 1

1

从表面上看,最后一行出现了可怕的错误,应该是:

INSERT INTO newTable SELECT * FROM @Temp_Table

这是将所有行从一个表传输到另一个表的标准方法。通常首选在 INSERT 部分中明确列出列并代替*

INSERT INTO newTable(StartHour, StartMinute, EndHour, EndMinute, StartTime, EndTime)
    SELECT StartHour, StartMinute, EndHour, EndMinute, StartTime, EndTime
      FROM @Temp_Table

这确实假设两个表中的列名相同。如有必要,您可以使用名称来解决问题。@Temp_Table 中未列出的 newTable 中的任何额外列都将插入一个空值;如果这导致违反约束,则应中止整个语句。

于 2012-04-27T00:03:29.943 回答