簡體   English   中英

如何在SQL Server中執行帶日期的While循環?

[英]How to Perform While loop with Date in SQL Server?

我想通過循環按日期插入記錄。 這就是我嘗試過的。

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

輸出值

 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

但這不起作用。 只需插入一次即可。 它不會繼續。 謝謝

編輯:在寬限期內,該問題已發生重大變化。 這是對原始問題的解答。

您根本不需要循環(實際上,您幾乎絕對不需要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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM