为什么我的 SQL 查询没有任何列?

Why does my SQL query not have any columns?

无论如何我都不是专家,但我经常写 SQL 查询。

我正在通过 Crystal Reports 2013 从 SQL Server 2016 中提取数据(对版本不满意)。顺便说一句,CR 允许参数,所以 {?DateStart} 就是这样。 {?DateStart}{?DateEnd} 是常规日期,{?ServiceProvider} 是数字数组。 EXEC sw_vwDateRange 生成一个 table,其中包含 {?DateStart}{?DateEnd} 之间的每个日期的行。

我的查询有效: (将 2021-01-19 14:28 EST 编辑为 simplify/improve 查询)

DECLARE @Result Table (CurrentDateTime datetime)

INSERT @Result EXEC sp_vwDateRange {?DateStart}, {?DateEnd}
SELECT * FROM @Result
    
CROSS APPLY
(
SELECT Count(DISTINCT ClientID) AS "Clients",
    Count(DISTINCT RoomID) AS "RoomCount"
FROM vw_Stays 
WHERE vw_Stays.BedDateStart <= DATEADD(day,1,CurrentDateTime)
    AND (vw_Stays.BedDateEnd IS NULL OR vw_Stays.BedDateEnd > DATEADD(day,1,CurrentDateTime)) 
    AND vw_Stays.OrganizationID IN {?ServiceProvider}
) t2

由于我从非索引视图 vw_Stays 中提取数据,因此我的效率有些低下,因此我将其替换为对原始 table 的引用。

DECLARE @Result Table (CurrentDateTime datetime)

INSERT @Result EXEC sp_vwDateRange {?DateStart}, {?DateEnd}
SELECT * FROM @Result
    
CROSS APPLY
(
SELECT Count(DISTINCT HIFIS_Client_Services.ClientID) AS "Clients",
    Count(DISTINCT HIFIS_StaysRoomsBedsHistory.RoomID) AS "RoomCount"
FROM HIFIS_Stays
    INNER JOIN HIFIS_Services ON HIFIS_Stays.ServiceID = HIFIS_Services.ServiceID
    INNER JOIN HIFIS_Client_Services ON HIFIS_Services.ServiceID = HIFIS_Client_Services.ServiceID
    INNER JOIN HIFIS_StaysRoomsBedsHistory ON HIFIS_Stays.StayID = HIFIS_StaysRoomsBedsHistory.StayID
    
WHERE HIFIS_StaysRoomsBedsHistory.BedDateStart <= DATEADD(day,1,CurrentDateTime) 
    AND (HIFIS_StaysRoomsBedsHistory.BedDateEnd IS NULL OR HIFIS_StaysRoomsBedsHistory.BedDateEnd > DATEADD(day,1,CurrentDateTime)) 
    AND HIFIS_Services.OrganizationID IN {?ServiceProvider}
) t2

但是它完全停止工作了。它没有给我任何错误,它只是完成了没有列和数据的查询。

抱歉,如果这个问题已经得到解答,但我真的不知道该使用什么搜索术语!

如果查询本身没有错误,只有两件事 return Crystal 中没有记录。

  1. 记录 selection/filter(包括参数)正在过滤为 return 无数据。请注意,这也可能是由于 Crystal 传递的参数与您期望在查询中获取的参数不同。

  2. SQL 安全本身根据用户(Windows ID 或 SQL ID)的访问级别进行过滤

哇,好尴尬,结果我把其中一张桌子的名字拼错了。 (HIFIS_StaysRoomsBedsHistory 中的 s 数错误。)我现在就爬走躲起来。但是我在解决这个问题上学到了很多东西!感谢您提供有关 CROSS APPLY 的信息,我会好好利用的。