为什么我的 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 中没有记录。
记录 selection/filter(包括参数)正在过滤为 return 无数据。请注意,这也可能是由于 Crystal 传递的参数与您期望在查询中获取的参数不同。
SQL 安全本身根据用户(Windows ID 或 SQL ID)的访问级别进行过滤
哇,好尴尬,结果我把其中一张桌子的名字拼错了。 (HIFIS_StaysRoomsBedsHistory 中的 s 数错误。)我现在就爬走躲起来。但是我在解决这个问题上学到了很多东西!感谢您提供有关 CROSS APPLY
的信息,我会好好利用的。
无论如何我都不是专家,但我经常写 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 中没有记录。
记录 selection/filter(包括参数)正在过滤为 return 无数据。请注意,这也可能是由于 Crystal 传递的参数与您期望在查询中获取的参数不同。
SQL 安全本身根据用户(Windows ID 或 SQL ID)的访问级别进行过滤
哇,好尴尬,结果我把其中一张桌子的名字拼错了。 (HIFIS_StaysRoomsBedsHistory 中的 s 数错误。)我现在就爬走躲起来。但是我在解决这个问题上学到了很多东西!感谢您提供有关 CROSS APPLY
的信息,我会好好利用的。