为什么这仅在Management Studio中起作用,而在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
这是我得到的错误:
因为SSRS中的查询需要为DML(数据操作语言)
IE
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,而只需在报告中将函数创建为代码即可。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句