Sql 返回数据而不访问表

Sql 返回数据而不访问表,sql,sql-server,tsql,reporting-services,Sql,Sql Server,Tsql,Reporting Services,这种情况忽略了这一点,这很无聊: 我有使用reporting services创建的报告。其中一些报告采用参数Month。他们输入所需月份的整数。例如:12月12日。 为了查看报表,我只需在VisualStudio中使用报表查看器。我需要月份字段作为下拉框,以便按名称选择月份。reporting services中有一项功能,允许您将字段绑定到存储过程,以便为下拉列表创建值/文本对 问题是: 我不想在数据库中创建months表,但我需要一个可以返回所有month/int对的存储过程。我相信有一个

这种情况忽略了这一点,这很无聊: 我有使用reporting services创建的报告。其中一些报告采用参数Month。他们输入所需月份的整数。例如:12月12日。 为了查看报表,我只需在VisualStudio中使用报表查看器。我需要月份字段作为下拉框,以便按名称选择月份。reporting services中有一项功能,允许您将字段绑定到存储过程,以便为下拉列表创建值/文本对

问题是: 我不想在数据库中创建months表,但我需要一个可以返回所有month/int对的存储过程。我相信有一个非常简单的解决办法,但我不知道它是什么!我的第一个想法是创建一个临时表,但我不知道如何手动添加每个月/int对到表中。。。感谢您的建议

我想要的是以下语句,除非不使用月数表:

SELECT MonthID, MonthName
FROM Months

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

此外,SP可以只包含一个查询,它将返回一个表,只需将其创建为:

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

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

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,该UDF将终止相同的内容并将此表返回给调用过程

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


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

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

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

完美!谢谢顺便说一句,你有缩写字段,但你没有添加缩写插入。谢谢缩写字段是一个计算列,基于名称字段的前三个字符。。。我还以为我会加上这一点作为奖励呢!啊。抱歉,我没有选中此项,但我认为不创建表会更好。谢谢嘿,这很好,没问题,但是您知道,这个表是一个内存中的表,只有在stotred进程运行时才存在。。。然后它看起来比创建一个表要好得多。完美的解决方案。谢谢
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