2017-01-18 9 views
0

ループを介して日付でレコードを挿入したい。これが私が試みたものです。SQL ServerでWhileループを日付で実行しますか?

DECLARE @str VARCHAR(500) = '1400,2001,2400,1201,1001,1302' 

DECLARE @startDate datetime = '2015-01-01 00:00:00' 
DECLARE @endDate datetime = '2015-01-01 23:59:59' 

WHILE (@startDate<='2015-01-31 00:00:00') 
BEGIN 

    WHILE LEN(@str) > 0 
    BEGIN 
     DECLARE @storeid VARCHAR(100) 
     IF CHARINDEX(',',@str) > 0 
      SET @storeid = SUBSTRING(@str,0,CHARINDEX(',',@str)) 
     ELSE 
      BEGIN 
      SET @storeid = @str 
      SET @str = '' 
      END 
      Print @storeid 
      Print @startDate 

     SET @str = REPLACE(@str,@storeid + ',' , '') 
     END 
    SET @startDate = @startDate+1; 
END 
OUTPUT

1400 
Jan 1 2015 12:00AM 
2001 
Jan 1 2015 12:00AM 
2400 
Jan 1 2015 12:00AM 
1201 
Jan 1 2015 12:00AM 
1001 
Jan 1 2015 12:00AM 
1302 
Jan 1 2015 12:00AM 

しかし、それは働いていません。単に1回だけ挿入するだけです。それは続かない。 おかげ

+1

を? –

+0

私はどんな挿入物も見ないでください – GuidoG

+0

@ZoharPeled私はここにどこに挿入するべきか言及しませんでした。しかし、私の結果を見てください。初めてDateループが実行されないのはなぜですか? –

答えて

1

EDIT:質問は大幅が猶予期間中に変更さました。これはオリジナル質問への回答です。

ループはまったく必要ありません(実際には、SQLではループはほとんど必要ありません)。

あなたは集計テーブルと日付のリストを生成し、あなたのINSERTでそれにJOINをすることによってこれを行うことができます。挿入は行かなかった

Declare @FromDate Date = '2015-01-01', 
     @ToDate  Date = '2015-01-31' 


;With E1(N) As (Select 1 From (Values (1), (1), (1), (1), (1), (1), (1), (1), (1), (1)) DT(N)), 
     E2(N) As (Select 1 From E1 A Cross Join E1 B), 
     E4(N) As (Select 1 From E2 A Cross Join E2 B), 
     E6(N) As (Select 1 From E4 A Cross Join E2 B), 
     Tally(N) As 
     (
      Select Row_Number() Over (Order By (Select Null)) 
      From E6 
     ), 
     Dates As 
     (
      Select DateAdd(Day, N - 1, @FromDate) Date 
      From Tally 
      Where N <= DateDiff(Day, @FromDate, @ToDate) + 1 
     ) 
INSERT INTO Transaction_Info 
    SELECT 
     TransactionNumber,StoreID,Time 
    FROM 
     [HQMatajer].[dbo].[Transaction] T 
    JOIN 
     Dates D ON D.Date = Convert(Date, T.Time) 
    WHERE 
     StoreID=1302; 
+0

ちょうど興味がある、私は質問の編集を見ることはできませんので、あなたは質問が大幅に変更されたことを意味しますか? – GuidoG

+3

執筆者の猶予期間(最初の5分、私は思う?)で行われた編集は、編集履歴には表示されません。 – Siyual

+1

ああ私はそれを知りませんでした – GuidoG

関連する問題