如何计算使用 WITH 子句创建的临时 table 中的记录数
how to count no of records in a temporary table created using WITH clause
我使用 sql 服务器创建了一个存储过程,我需要计算使用 'WITH' 子句创建的临时 table 中的记录数。
我曾经使用那个 temp table 作为内部连接。除此之外,我想计算该记录 temp table 中的记录数并将该值设置为 @SlotCount
变量。
我这样试过(temp table name is cte):
SELECT @SlotCount = COUNT(*) FROM cte
这会出错,因为我在存储过程中使用了两次 temp table。所以请帮我解决这个问题。谢谢
存储过程:
ALTER PROCEDURE [dbo].[usp_GetXXXXXXXXXXXXXXXXX]
-- Add the parameters for the stored procedure here
@Starttime DATETIME,
@Endtime DATETIME
AS
BEGIN
DECLARE @SlotCount int
;WITH cte AS ( SELECT @Starttime starttime, DATEADD(MINUTE, 15, @Starttime) endtime
UNION ALL
SELECT endtime, DATEADD(MINUTE, 15, endtime)
FROM cte
WHERE endtime < @Endtime)
--do something for count no of records in cte table and set that value to @SlotCount
select count(a.AVAIL_ID),a.TEACHER_USERNAME
from cte c
INNER JOIN AvailabilityDetail ad ON c.starttime = ad.StartDateTime AND c. endtime = ad.EndDateTime
INNER JOIN AVAILABILITY a ON ad.AVAIL_ID = a.AVAIL_ID
LEFT JOIN TEACHER_BIO b ON a.TEACHER_USERNAME = b.TEACHER_USERNAME
WHERE ad.IsAvailable = 1
AND ad.AvailabilityType = 'N'
AND b.Active = 1
AND b.IsGroupClass = 1
AND b.HIDE_FROM_SCHEDULING = 0
GROUP BY a.AVAIL_ID,a.TEACHER_USERNAME
END
您可以将结果存储到临时 table,然后 return 它
DECLARE @SlotCount int
;WITH cte AS ( SELECT @Starttime starttime, DATEADD(MINUTE, 15, @Starttime) endtime
UNION ALL
SELECT endtime, DATEADD(MINUTE, 15, endtime)
FROM cte
WHERE endtime < @Endtime)
select count(a.AVAIL_ID),a.TEACHER_USERNAME
INTO #cte from cte c
INNER JOIN AvailabilityDetail ad ON c.starttime = ad.StartDateTime AND c. endtime = ad.EndDateTime
INNER JOIN AVAILABILITY a ON ad.AVAIL_ID = a.AVAIL_ID
LEFT JOIN TEACHER_BIO b ON a.TEACHER_USERNAME = b.TEACHER_USERNAME
WHERE ad.IsAvailable = 1
AND ad.AvailabilityType = 'N'
AND b.Active = 1
AND b.IsGroupClass = 1
AND b.HIDE_FROM_SCHEDULING = 0
GROUP BY a.AVAIL_ID,a.TEACHER_USERNAME
SELECT * FROM #cte
SET @SlotCount = (SELECT COUNT(*) FROM #cte)
我使用 sql 服务器创建了一个存储过程,我需要计算使用 'WITH' 子句创建的临时 table 中的记录数。
我曾经使用那个 temp table 作为内部连接。除此之外,我想计算该记录 temp table 中的记录数并将该值设置为 @SlotCount
变量。
我这样试过(temp table name is cte):
SELECT @SlotCount = COUNT(*) FROM cte
这会出错,因为我在存储过程中使用了两次 temp table。所以请帮我解决这个问题。谢谢
存储过程:
ALTER PROCEDURE [dbo].[usp_GetXXXXXXXXXXXXXXXXX]
-- Add the parameters for the stored procedure here
@Starttime DATETIME,
@Endtime DATETIME
AS
BEGIN
DECLARE @SlotCount int
;WITH cte AS ( SELECT @Starttime starttime, DATEADD(MINUTE, 15, @Starttime) endtime
UNION ALL
SELECT endtime, DATEADD(MINUTE, 15, endtime)
FROM cte
WHERE endtime < @Endtime)
--do something for count no of records in cte table and set that value to @SlotCount
select count(a.AVAIL_ID),a.TEACHER_USERNAME
from cte c
INNER JOIN AvailabilityDetail ad ON c.starttime = ad.StartDateTime AND c. endtime = ad.EndDateTime
INNER JOIN AVAILABILITY a ON ad.AVAIL_ID = a.AVAIL_ID
LEFT JOIN TEACHER_BIO b ON a.TEACHER_USERNAME = b.TEACHER_USERNAME
WHERE ad.IsAvailable = 1
AND ad.AvailabilityType = 'N'
AND b.Active = 1
AND b.IsGroupClass = 1
AND b.HIDE_FROM_SCHEDULING = 0
GROUP BY a.AVAIL_ID,a.TEACHER_USERNAME
END
您可以将结果存储到临时 table,然后 return 它
DECLARE @SlotCount int
;WITH cte AS ( SELECT @Starttime starttime, DATEADD(MINUTE, 15, @Starttime) endtime
UNION ALL
SELECT endtime, DATEADD(MINUTE, 15, endtime)
FROM cte
WHERE endtime < @Endtime)
select count(a.AVAIL_ID),a.TEACHER_USERNAME
INTO #cte from cte c
INNER JOIN AvailabilityDetail ad ON c.starttime = ad.StartDateTime AND c. endtime = ad.EndDateTime
INNER JOIN AVAILABILITY a ON ad.AVAIL_ID = a.AVAIL_ID
LEFT JOIN TEACHER_BIO b ON a.TEACHER_USERNAME = b.TEACHER_USERNAME
WHERE ad.IsAvailable = 1
AND ad.AvailabilityType = 'N'
AND b.Active = 1
AND b.IsGroupClass = 1
AND b.HIDE_FROM_SCHEDULING = 0
GROUP BY a.AVAIL_ID,a.TEACHER_USERNAME
SELECT * FROM #cte
SET @SlotCount = (SELECT COUNT(*) FROM #cte)