如何在SQL Server中执行带日期的While循环?

如何在SQL Server中执行带日期的While循环?,sql,sql-server,date,Sql,Sql Server,Date,我想通过循环按日期插入记录。这就是我试过的 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 LE

我想通过循环按日期插入记录。这就是我试过的

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
但它不起作用。简单地说,它只插入一次。它不会继续。 谢谢编辑:这个问题在宽限期内发生了巨大的变化。这是对原问题的回答

您根本不需要循环事实上,在SQL中几乎不需要循环

您可以通过生成带有理货表的日期列表,并在插入时连接到该列表来完成此操作:


插页到哪里去了?我没有看到任何插页either@ZoharPeled我在这里没有提到在哪里插入。但是看看我的结果。为什么日期循环在第一次之后不执行?对我来说似乎是个问题。你的目标是什么?只是好奇,我看不到问题中有任何修改,那么你所说的问题被彻底改变是什么意思?我想在宽限期的前5分钟进行了修改?作者没有出现在编辑历史中。哦,我不知道that@Siyual为什么我的日期循环在第一次之后不执行?
 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
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;