0

元の行が分割される行数をカウントするループにストアドプロシージャに配置する以下のロジックから結果を取得するにはどうすればよいですか。したがって、特定の行は、最終的に3つの新しい行になるように計算される可能性があります...または行がない....または1つです。だから私はカウンターとそれを誘惑から抜け出して実際のテーブルに入れる方法が必要です。私は一時テーブルを更新しようとしましたが、今日は何時間も運が悪かったのです。すべての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

これは、列名が 2 つのテーブルで同じであることを前提としています。必要に応じて、名前を付けて修正できます。@Temp_Table にリストされていない newTable の余分な列には、null が挿入されます。それが制約違反を引き起こす場合は、ステートメント全体を中止する必要があります。

于 2012-04-27T00:03:29.943 に答える