在不访问表的情况下返回数据

时间:2009-09-03 22:46:40

标签: sql sql-server tsql reporting-services

情况(忽略这很无聊): 我有使用报告服务创建的报告。其中一些报告采用参数“月”。他们输入他们想要的月份的整数。示例:12月= 12。 为了查看报告,我只是在visual studio中使用Report Viewer。我需要将月份字段作为下拉框,以便按名称选择月份。报告服务中有一个功能,允许您将字段绑定到存储过程,以便为下拉列表创建值/文本对。

问题: 我不想在我的数据库中创建“月”表,但我需要一个可以返回所有月/ int对的存储过程。我确信有一个非常简单的解决方案,但我不确定它是什么!我的第一个想法是创建一个临时表,但我不确定如何添加手动添加每个月/ int对表...所有的建议表示赞赏!

我想要的是以下声明,除非不使用月表:

SELECT MonthID, MonthName
FROM Months

5 个答案:

答案 0 :(得分:6)

怎么样:

CREATE PROCEDURE ListMonths
AS

    SELECT 1 AS MonthId, 'January' AS MonthName
     union all select 2, 'February'
     union all select 3, 'March'
     union all select 4, 'April'
     union all select 5, 'May'
     union all select 6, 'June'
     union all select 7, 'July'
     union all select 8, 'August'
     union all select 9, 'September'
     union all select 10, 'October'
     union all select 11, 'November'
     union all select 12, 'December'

GO

打电话给我,我相信它会返回你想要的东西。

答案 1 :(得分:4)

你真的需要为此创建一个表吗?您可以手动执行选择:


SELECT 1, 'January' UNION ALL
SELECT 2, 'February' UNION ALL
...
SELECT 12, 'December'

答案 2 :(得分:1)

听起来你需要的是一个视图,基本上你编写一个自定义查询并将其作为表返回。

此外,SP只能包含一个Query,它将返回一个表,只需将其创建为:

CREATE PROCEDURE [dbo].[mytable] 
    -- Add the parameters for the stored procedure here
    @inputarg1 = 0
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
    SELECT  
        .....
    FROM
        .....
    WHERE
        .....
END

答案 3 :(得分:1)

在存储过程中,执行以下操作

Declare @Months Table 
   (monthNo TinyInt Primary Key Not Null,
    name varChar(10) Not Null,
    Abbrev char(3) = Substring(name,1,3))
Insert @Months ( monthNo, name) Values (1, 'January')
Insert @Months ( monthNo, name) Values (2, 'February')
...
Insert @Months ( monthNo, name) Values (12, 'December')

或者,如果你需要在多个存储过程中使用这个表,那么写一个UDF会死掉同样的东西并将这个表返回给调用proc ...

答案 4 :(得分:0)

WITH    months AS
        (
        SELECT  CAST('2009.01.01' AS DATETIME) AS m, 1 AS num
        UNION ALL
        SELECT  DATEADD(month, 1, m), num + 1
        FROM    months
        WHERE   num < 12
        )
SELECT  num, DATENAME(month, m)
FROM    months