我正在努力弄清楚如何获取此存储过程以返回userId的所有约会(这是唯一需要的输入)。现在,它只返回一个约会。我希望它返回与userId关联的每个约会的所有5个属性(appointment_id,host_name,visit_start,visit_end和visit_location),每个约会用{}分隔。因此,如果访问者当天有5个约会,我希望返回所有5个约会(以及5个约会属性),每个单独的约会都包含在{}中。我还想处理userId没有与之关联的约会的情况。这段代码运行完美,但是,就像我说的那样,它只返回1个约会,而不是所有与userId关联的约会。我觉得我需要一个约会数组,尽管我不认为数组是SQL Server的一部分。我可能需要一个变量表,但是我不确定如何实现。我愿意接受任何建议。
CREATE PROCEDURE [dbo].[GetMeetings]
(
@userId BIGINT,
@appointmentId BIGINT OUTPUT,
@hostName NVARCHAR(101) OUTPUT,
@startTime DATETIMEOFFSET(7) OUTPUT,
@endTime DATETIMEOFFSET(7) OUTPUT,
@location NVARCHAR(100) OUTPUT
)
AS
BEGIN
SET NOCOUNT ON
SELECT TOP 10
@appointmentId = appointment_id,
@hostName = host_name,
@startTime = visit_start,
@endtime = visit_end,
@location = visit_location
FROM
dbo.reg_visits v1 INNER JOIN dbo.reg_visitors v2 on v1.reg_visit_id = v2.reg_visits_reg_visit_id
WHERE
v2.reg_visits_reg_visit_id IN
(SELECT TOP 10
reg_visits_reg_visit_id AS id
FROM
dbo.reg_visitors
WHERE visitor_profile_visitor_id = @userId
ORDER BY
reg_visitors_id DESC)
AND v1.visit_start > GETDATE() ORDER BY v1.reg_visit_id desc
END
答案 0 :(得分:1)
您的选择语句应该只是
CREATE PROCEDURE [dbo].[GetMeetings]
(
@userId BIGINT
)
AS
BEGIN
SET NOCOUNT ON
SELECT TOP 10
appointment_id,
host_name,
visit_start,
visit_end,
visit_location
我们想将其作为结果集而不是作为out参数返回。 OUTPUT参数实际上只能有一个值,因此这就是为什么您只返回一个约会的原因,并且它可能总是期望的10行中的最后一行。因此,也要删除所有OUTPUT参数,只需发送用户ID。