如何为SQL查询中的参数逐个传递多个值并将结果联合起来?

时间:2018-02-27 11:01:49

标签: sql sql-server loops union

我有一个接受参数@EndDate as DateTime的SQL语句。我希望能够逐个传递@EndDate的多个值,然后Union传递所有查询的结果。我尝试过使用CTE,但没有用。我想为@EndDate传递几个日期。任何帮助将不胜感激。

我的查询是:

DECLARE @EndDate as DateTime
SET @EndDate = '2018/02/25'

SELECT  
CONVERT(VARCHAR, @EndDate, 101)  [R_Date]
,[Name]     
[Type] 
FROM [dbo].[S_Table]

1 个答案:

答案 0 :(得分:0)

这是Sample查询如何循环遍历多个日期。 while循环应该将所有行选择到一个表中,不需要执行union all

   DECLARE @table TABLE (
    day INT
    ,Month INT
    ,DATE DATE
    )
DECLARE @startdate DATE = '2018/02/25'
DECLARE @enddate DATE = cast(getdate() AS DATE)

WHILE @startdate <= @enddate
BEGIN
    SELECT @startdate = dateadd(dd, 1, @startdate)

    INSERT @table (
        day
        ,Month
        ,DATE
        )
    SELECT day(@startdate)
        ,MONTH(@startdate)
        ,@startdate
END

SELECT *
FROM @table;

在将多个值传递给查询的逻辑中,您可以将结果集存储到临时表中,该表包含循环记录

DECLARE @table TABLE (
    [R_Date] DATE
    ,Name VARCHAR(155)
    ,Value VARCHAR(155)
    )
DECLARE @enddate DATE = '2018/02/25'
DECLARE @enddate1 DATE = cast(getdate() AS DATE)

WHILE @enddate <= @enddate1
BEGIN
    SELECT @enddate = dateadd(dd, 1, @enddate)

    INSERT @table (
        R_Date
        ,Name
        ,Value
        )
    SELECT CONVERT(VARCHAR, @EndDate, 101) [R_Date]
        ,[Name] [Type]
    FROM [dbo].[S_Table]
    WHERE DATE = @enddate
        -------More filters
END

SELECT *
FROM @table;