Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 基于参数值的循环_Sql Server 2008_Loops_If Statement_While Loop - Fatal编程技术网

Sql server 2008 基于参数值的循环

Sql server 2008 基于参数值的循环,sql-server-2008,loops,if-statement,while-loop,Sql Server 2008,Loops,If Statement,While Loop,我需要创建一个基于两个参数填充的临时表: declare @Start date = '01/01/2015' declare @End date = '12/31/2015' 临时表应有一列,该列将捕获@Start和@End参数之间的所有年份和月份的YYYYMM 这是我到目前为止所拥有的。我想在201412停止,然后在201501重新开始。相反,这个循环以+1的增量继续进行,我不想看到201413..以此类推: declare @Start date = '01/01/2014' decla

我需要创建一个基于两个参数填充的临时表:

declare @Start date = '01/01/2015'
declare @End date = '12/31/2015'
临时表应有一列,该列将捕获@Start和@End参数之间的所有年份和月份的YYYYMM

这是我到目前为止所拥有的。我想在201412停止,然后在201501重新开始。相反,这个循环以+1的增量继续进行,我不想看到201413..以此类推:

declare @Start date = '01/01/2014'
declare @End date = '12/31/2015'

declare @monthstart as int
declare @monthend as int
declare @increment as int

set @monthstart = (SELECT LEFT(CONVERT(varchar, @Start,112),6))
set @monthend = (SELECT LEFT(CONVERT(varchar, @End,112),6))

create table #datetemp  (RelevantYYYYMM int)
insert into #datetemp values (@monthstart)
set @increment = @monthstart


While @increment < @monthend
BEGIN 
set @increment = (select Max(RelevantYYYYMM) + 1 from #datetemp)
insert into #datetemp values (@increment)
set @increment = (select Max(RelevantYYYYMM) from #datetemp)
IF (select Max(RelevantYYYYMM) from #datetemp) > @monthend
Break
else 
continue
END

select * from #datetemp

您可以使用理货台并避免循环:

CREATE TABLE #datetemp (RelevantYYYYMM INT);

DECLARE @Start DATE = '01/01/2015', @End DATE = '12/31/2015';

WITH tally_table AS
(
  SELECT TOP 1000 rn = ROW_NUMBER() OVER(ORDER BY name) - 1
  FROM master..spt_values
)
INSERT INTO #datetemp(RelevantYYYYMM)
SELECT LEFT(CONVERT(varchar, DATEADD(month, rn, @Start),112),6)
FROM tally_table
WHERE YEAR(DATEADD(month, rn, @Start)) <= YEAR(@End)
  AND MONTH(DATEADD(month, rn, @Start)) <= MONTH(@End)

SELECT *
FROM #datetemp;