为什么这只适用于管理工作室,而不适用于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
这是我得到的错误:
答案 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,只需在报告中创建代码即可。