如何在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;