我有一个返回大约 200 多行的报告,在其中一个列上我计划使用一个函数来计算给定类型的总量(即库存中有多少果冻豆)。有没有办法让我在特定的单元格/文本框中执行 SQL 或调用函数或存储过程,以便我可以仅为当前组列属性执行此函数?
此函数执行一次大约需要 3 秒。但是,如果我在用于报表正文的存储过程中使用它,该存储过程大约需要 3 分钟,因为它正在为数据库的特定表(27000 多条记录)中的每条记录执行该函数。
我有一个返回大约 200 多行的报告,在其中一个列上我计划使用一个函数来计算给定类型的总量(即库存中有多少果冻豆)。有没有办法让我在特定的单元格/文本框中执行 SQL 或调用函数或存储过程,以便我可以仅为当前组列属性执行此函数?
此函数执行一次大约需要 3 秒。但是,如果我在用于报表正文的存储过程中使用它,该存储过程大约需要 3 分钟,因为它正在为数据库的特定表(27000 多条记录)中的每条记录执行该函数。
数据集主体中的标量函数应该可以正常工作。这比花时间在 SSRS 中创建函数要容易得多,因为底层的 SQL 会完成所有工作,并且可能也会更快地返回数据。除非您必须关联两个不同的数据集,否则您可能必须使用自定义表达式。不过,我倾向于尽可能在数据集中进行大部分数学运算。您在 SSRS 中使用的表达式越多,您的报告就会变得越慢。
如果我创建一个简单的数据库、一个简单的表并具有一个标量函数(例如简单的一个):
use test-- database I created for concepts
create table Person ( id int identity, person varchar(64), orders int );
insert into Person values ('Brett',10),('Brett',20),('John',10)
GO
create function dbo.tester ( @intputint int )
returns int
as
begin
declare @return int
select @return = @intputint * 10
return @return
end
GO
当我刚刚在 SQL Server 2008 中执行此操作时,我应该能够使用该标量函数创建一个列:
select *, dbo.tester(orders) as OrdersTimesTen
from Person