我可以将存储过程合并到常规查询中,还是我认为它错了? (SQL Server 2016)

问题描述 投票:1回答:1

这可能是一个经典的SO场景,问题没有解决我想要实现的问题,所以我只是解释一下我的情况。

我创建了大量的SSRS报告。其中许多共享许多共同领域。在非常规律的基础上,这些字段的基础定义发生了变化,我必须通过每个报告进行必要的更改,这是耗时的,并且可能会导致错误使报告发生分歧。

我创建了一个程序,它将@startdate和@enddate作为参数,并根据我们当前的定义(提供的呼叫,呼叫应答,20多秒回答,响铃)返回4个公共字段,当我自己执行它时,它很有效。我想要的是将该过程作为更大的SELECT查询的一部分,该查询中包含非公共字段。就像是

SELECT

,[Date]
,[Total seconds]
,(procedure fields)
,...

from [table]

where [date] >= '2017-01-01'

group by [date]

在我的想法中,这意味着当定义改变时,我只需要改变程序一次,每个报告都会更新。这可能吗?或者我使用错误的工具来实现我想要实现的目标?如果是这样我应该使用什么呢?

sql sql-server stored-procedures reporting-services
1个回答
2
投票

我认为内联表值函数是您的需求的更好候选者。

您可以使用内联表值函数下推谓词,也可以在select语句中从中进行选择。

就像是.....

CREATE FUNCTION dbo.ILTVF_CommonColumns ( 
    @startdate  DATETIME 
,   @enddate    DATETIME
)
RETURNS TABLE
AS
RETURN
    SELECT    Column1   
            , Column2
            , Column3
            , Column4
    FROM    dbo.TableName             -- Change logic here whenever need to
    WHERE   DateColumn >= @startdate
    AND     DateColumn <= @enddate;
GO

样品选择

SELECT
            [Date]
        ,   [Total seconds]
        ,   fn.*
from [table] t
    CROSS APPLY dbo.ILTVF_CommonColumns (@StartDate , @EndDate) fn 
                                            ^           ^
                                            |___________| 
                                        Or these could be fields from your [Table]
where t.[date] >= '2017-01-01'
group by [date]
© www.soinside.com 2019 - 2024. All rights reserved.