【问题标题】:SQL Stored Procedure shows blank reportSQL 存储过程显示空白报告
【发布时间】:2015-12-14 08:53:19
【问题描述】:

我正在尝试在 VS2015 中创建 Crystal Report,但我遇到了存储过程的问题。当我在没有存储过程的情况下运行报告时,它会获取所需的所有数据,并且所有组和公式都可以正常工作。下面是我的主要 SQL 代码。

SELECT type, description, hire_status, fleet_no, location, date_starting, time_finishing, date_finishing, type, week_number, changes
FROM   XXXXXX INNER JOIN XXXXXX ON fleet_no= XXXXXX.fleet_no
WHERE  week_number= @weekNo

当我尝试向报表添加存储过程时,我只得到一个空白报表,我丢失了报表中的所有数据。存储过程如下:

USE [xxxxxx]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER Procedure [XXXXXXX].[getCurrentLocation] 
@fleet varchar(50) = NULL
AS 
Begin
SELECT TOP 1 (dbo.tbl_job_planning.location)
    FROM   dbo.tbl_job_planning
    WHERE  (fleet_no = @fleet) AND (date_starting <= DATEADD(week, DATEDIFF(day, 0, GETDATE()) / 7, 5))
    ORDER BY date_starting DESC
end;

我在记录选择中将参数传递给这个存储过程。 我希望存储过程在报告的每一行显示一个位置。当我只使用存储过程运行报告时,我只返回 1 个值,而不是报告中我需要的每个项目的值。

【问题讨论】:

  • 您使用的是 MySQL 还是 MS SQL Server?不要标记未涉及的产品...
  • 如果您需要所有记录,请不要将 top1 删除,而只需使用数据库列。

标签: sql-server stored-procedures crystal-reports


【解决方案1】:

您将获得 1 个值,因为您指定 SELECT TOP 1 (dbo.tbl_job_planning.location)。只需删除TOP 1 或将1 设置为您希望将其限制为任意数量的结果,但肯定不是您指定的结果

【讨论】:

  • 我想要存储过程做的就是为报告中的每条记录返回一个最新的(top1)值。例如:如果我有一个返回地址值的报告:姓名、出生日期、地址、“最新的上一个地址”、邮政编码等。我希望我的存储过程为我的数据集中的每个人在报表中返回“最新的上一个地址” .我希望这是有道理的。
  • @John 如果这是要求,那么您的查询不起作用...您需要在水晶报表中进行操作...您能解释一下您的数据是什么样子的吗?
  • 好的,我会尝试:我需要它来显示 FleetNo、描述、finishdate、finishtime、hire_status、“上一个位置”(这是我试图通过存储过程执行的操作)。我需要对与我的参数匹配的每条记录执行此操作(我有两个)。因为我正在匹配参数,所以 sql 语句不会只返回匹配的表中的所有数据。这不包括“以前的位置”,因为它不属于参数
  • 我建议使用 sqlfiddle sqlfiddle.com 构建您的表,然后我们可以从那里提供帮助。如果我们可以看到您的表结构,我们可以帮助确定任何可能导致您无法获得您尝试检索的结果的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 2017-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多