要在MS SQL中获取数据,可以使用sql查询,存储过程和存储函数,之前我们已经讨论了如何使用动态查询和存储过程作为报表数据源,在本文中,我们将创建一个表和标量函数,并在报表中使用它们,表函数返回表,标量函数返回单个值。首先,在MS SQL中创建一个表函数:
USE [testdb]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Description: Returns customers who live in the specified city
-- =============================================
CREATE FUNCTION [dbo].[GetCustomersFromCity]
(
@city VARCHAR(20)
)
RETURNS TABLE
AS
RETURN
(
SELECT * FROM dbo.CUSTOMER WHERE CITY = @city
)
该函数采用一个参数——城市名称,并返回此城市中的客户列表。再添加一个现在的标量函数:
USE [testdb]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Description: Returns last added customer
-- =============================================
CREATE FUNCTION [dbo].[GetLastCustomer]
()
RETURNS VARCHAR(30)
AS
BEGIN
DECLARE @Name VARCHAR(30)
SELECT TOP 1 @Name = CONCAT(ind.FIRST_NAME, ' ', ind.LAST_NAME) FROM dbo.Customer cus
JOIN dbo.Individual ind ON ind.CUST_ID = cus.CUST_ID
ORDER BY cus.CUST_ID
RETURN @Name
END
此函数不接受参数,但返回最后注册的客户端名称。现在让我们继续查看报表。首先,在报表中创建一个参数,我们将使用它将城市名称转移到函数,以检索数据。
添加到MS SQL数据库的连接:
然后,在下一步中,我们被要求选择表,但我们将使用Add SQL query ...按钮
在下一步中,设置新表的名称——TableFunction,点击Next:
与存储过程不同,函数用作表,也就是说,需要使用Select来获取数据:
在下一步中,我们需要添加city查询参数,在其Expression属性中,选择报表的Param参数,单击Finish,得到一个新的数据源:
现在添加对话框窗体并将报表的Param参数拖到它上面,将字段从TableFunction表拖到Data band,运行报表,在对话框中输入值:
从表函数中获取样本:
文章开头我们创建了两个函数,这个例子更简单,因为我没有向这个函数添加一个传入参数。让我们再创建一个数据源,另外,至于第一次——connection to MS SQL,再次单击Add SQL query ...按钮,调用标量函数与调用表函数略有不同:
跳过所有其他步骤:
再添加一页报表并将数据拖动到新数据源的单个字段——ScalarFunc,运行报表,转到第二页:
如上所示,使用函数获取数据非常简单,它们将帮助您在开发报表及其执行时节省时间。