代码在Management Studio中工作,但不在.rdl报告的数据集中

时间:2015-06-30 00:22:57

标签: sql-server-2008 tsql reporting-services rdl

为什么这只适用于管理工作室,而不适用于rdl报告的数据集?

我无法访问实时数据库,因此无法将此功能直接添加到数据库中。

if OBJECT_ID (N'dbo.PreviousFriday', N'FN') is not null
    drop function dbo.PreviousFriday;
go
create function dbo.PreviousFriday (@Date datetime)
returns datetime
with execute as caller
as
begin
    declare @PreviousFriday datetime;

    set @PreviousFriday = DATEADD(DAY, (case DATEPART(DW, @Date)
        when 1 then -2
        when 2 then -3
        when 3 then -4
        when 4 then -5
        when 5 then -6
        when 6 then 0
        when 7 then -1
    end), @Date)
    return(@PreviousFriday);
end
go

if OBJECT_ID (N'dbo.NextFriday', N'FN') is not null
    drop function dbo.NextFriday;
go
create function dbo.NextFriday (@Date datetime)
returns datetime
with execute as caller
as
begin
    declare @NextFriday datetime;

    set @NextFriday = DATEADD(DAY, (case DATEPART(DW, @Date)
        when 1 then 5
        when 2 then 4
        when 3 then 3
        when 4 then 2
        when 5 then 1
        when 6 then 0
        when 7 then 6
    end), @Date)
    return(@NextFriday);
end
go

这是我得到的错误: enter image description here

1 个答案:

答案 0 :(得分:1)

因为SSRS中的查询需要是DML(数据操作语言)

 select * from ...

 exec dbo.prcGetMyData ...

那种事......


但是您正在尝试输入 DDL (数据定义语言),即您尝试更改基础数据库,如果允许这样做,这将是一个安全问题。


您可以创建一个名为LastFriday的数据集,其中包含您的脚本。然后,您可以使用文本框中的数据集值或其他地方......

SELECT    DATEADD(DAY, (CASE DATEPART(DW, @Date) 
                         WHEN 1 THEN - 2 
                         WHEN 2 THEN - 3 
                         WHEN 3 THEN - 4 
                         WHEN 4 THEN - 5 
                         WHEN 5 THEN - 6 
                         WHEN 6 THEN 0 
                         WHEN 7 THEN - 1 END), @Date) AS LastFriday

如果要在多个报告中共享,请创建共享数据集。 (你需要为NextFriday做同样的事情!)

或者你可以完全避免使用TSQL,只需在报告中创建代码即可。