Sql 返回特定行的存储过程

Sql 返回特定行的存储过程,sql,sql-server-2005,stored-procedures,Sql,Sql Server 2005,Stored Procedures,我正在开发一个预约系统,它有以下表格(见附图)。表tblScheduleDates中有一些在年初输入的年度任命的固定日期,例如2012年2月28日、2012年3月1日、2012年3月4日等,tblscheduleTimes中有一些固定时间用于这些任命。因此,例如,2012年2月28日,可用时间为10:00、11:00、12:00等。tblBookings是指预约安排在固定日期、固定时间和预订状态下的值已预订或取消。我想尝试编写一个存储过程来返回tblscheduledates和tblschedu

我正在开发一个预约系统,它有以下表格(见附图)。表tblScheduleDates中有一些在年初输入的年度任命的固定日期,例如2012年2月28日、2012年3月1日、2012年3月4日等,tblscheduleTimes中有一些固定时间用于这些任命。因此,例如,2012年2月28日,可用时间为10:00、11:00、12:00等。tblBookings是指预约安排在固定日期、固定时间和预订状态下的值已预订或取消。我想尝试编写一个存储过程来返回tblscheduledates和tblscheduleTimes中剩余的可用日期和时间。因此,我认为必须检查固定日期和时间是否存在于tblbookings中,以及是否不由存储过程返回。欢迎任何想法或帮助

ScheduleTime是否链接到ScheduleDates?就您所拥有的模式而言,您可能会有大量重复的数据,或者仅仅是错误的数据

看起来时间到日期的PK/FK映射未正确显示。链接指向时间的类型。但是,scheduletimeid是否在scheduledates中

如果值正确:


我建议重新命名该表,因为它似乎真的是一个混合在一起的日程日期和时间。一个类似于我下面第二个项目的解决方案可以解决这个错误命名问题

如果图中的链接正确:


也许我错过了什么,但我看到的是:

预订表仅与预定日期关联。但是,此计划日期的类型与时间有关。这样您就可以有一个全天计划的类型了吗?否则,2012年2月28日的所有预订都需要在日程日期中创建一个新条目。那么,同一日期可以有5行,只是因为它们有不同的时间?我不认为有必要将日期分别存储5次,因为时间确实不同

  • 为什么不将预订与预定日期和预定时间联系起来?这也将使您的查询更加容易

  • 或者,您可以有一个映射表,它是ScheduledAdateAndTime,将两者联系在一起,然后您只需要在预订中引用该表

  • 或者,您可以将日期和时间存储在一个表中


不过,也许我遗漏了一个商业原因。

无论如何,我认为你应该在这两种情况下都给出答案。根据实际的图表,如果你没有回答OP的问题,那么你最好不要盲目地回答,而是找出问题背后的原因。如果发现问题,就需要提出。传播错误的东西似乎是不对的。也许,这将是向另一个方向推进,让pikk得到答案,因为模式变得更容易管理。我只是在看到图表与实际列不匹配后更新了我的答案。它看起来像是我建议的那样设置的,但是链接绘制不正确。
SELECT tblScheduleDates.*, tblScheduleDates.* 
FROM tblScheduleDates
    JOIN tblScheduleTimes
        ON tblScheduleTimes.scheduleTimeID =
            tblScheduleDates.scheduleTime_ID
WHERE NOT EXISTS 
    (
        SELECT 1 
        FROM tblBookings 
            JOIN tblBookingStatus
                ON tblBookingStatus.Status = 'Booked'
        WHERE tblBookings.ScheduleDate_ID 
            = tblScheduleDates.scheduleDateID
    )