Хранимая процедура - Дата

В процессе обучения в колледже, для которого требуется простая хранимая процедура:

Создайте хранимую процедуру, которая принимает единственный параметр, который принимает дату. Тип данных Date будет datetime. Эта процедура магазина должна возвращать всю информацию об арендодателе и собственности для просмотров, которые произошли в этот день.

Он будет отправлен на SQL Server из колледжа, но сейчас дома я тренируюсь с MS Access 2010.

Таблица = Property_For_Rent:

Pno  \\( this is the property ID )
Address_1
Address_2
Address_3

Таблица = Renter

Rno \\( this is the renter ID )
Fname
Lname

Таблица = Viewing

Rno
Pno
Date

Исследование нашло здесь другого человека с похожей головоломкой (легче настроить, если кто-то может показать, где пошло не так, будет здорово, спасибо!

create procedure sp_orders_by_dates
    @startdate smalldatetime,
    @enddate smalldatetime
as
    select  
       OrderID,
       o.CustomerID,
       c.CompanyName as CustomerCompany,
       s.ShipperID,
       s.CompanyName as ShipperCompany,
       ShippedDate
    from    
       Orders o 
    join 
       Customers c on o.CustomerID = c.CustomerID 
    join 
       Shippers s on s.ShipperID = o.ShipperID
    where 
       @startdate = ShippedDate,
       @enddate = ShippedDate
    order by 
       ShippedDate

person Glen    schedule 04.05.2015    source источник
comment
Добро пожаловать в SO. +1 за то, что на самом деле признал, что это проект колледжа, и показал, что у вас есть на данный момент.   -  person miltonb    schedule 04.05.2015
comment
Итак, в чем именно заключается вопрос?   -  person Mureinik    schedule 04.05.2015
comment
Загрузите и установите sql server express edition. Не используйте доступ для изучения sql server.   -  person Zohar Peled    schedule 04.05.2015
comment
Боковое примечание: вам не следует использовать префикс sp_ для ваших хранимых процедур. Microsoft зарезервировала этот префикс для собственного использования ( см. Именование хранимых процедур), и вы действительно рискуете столкнуться с конфликтом имен когда-нибудь в будущем. Это также плохо сказывается на производительности хранимых процедур. Лучше просто избегать sp_ и использовать что-то еще в качестве префикса - или вообще не использовать префикс!   -  person marc_s    schedule 04.05.2015
comment
Спасибо, ребята, вопросы заключаются в написании кода, чтобы показать подробную информацию об арендаторах и свойствах на определенную дату (в таблице просмотра)   -  person Glen    schedule 04.05.2015
comment
Ваши столбцы ShippedDate в таблице не могут совпадать одновременно с @startDate и @enddate - похоже, это то, что вы указали в предложении WHERE - что вы действительно хотите проверить? ?   -  person marc_s    schedule 04.05.2015
comment
@marc_s спасибо за редактирование. Я пробовал использовать дату начала и окончания и указать только одну дату. мне нужна студентка, чтобы показать результаты только с одной конкретной даты   -  person Glen    schedule 04.05.2015
comment
если это поможет, все записи находятся в этом диапазоне дат: Дата 05.03.2015 20.03.2015 03.03.2015 01.03.2015 23.03.2015 25.03.2015 28.03.2015 13 / 03/2015 22.03.2015 11.03.2015   -  person Glen    schedule 04.05.2015
comment
Так что, наверное, должно быть WHERE ShippedDate = @StartDate OR ShippedDate = @EndDate ....   -  person marc_s    schedule 04.05.2015
comment
Теперь тестирование будет сообщать вам о прогрессе, чтобы не напрягать ваше внимание! Спасибо ребята!   -  person Glen    schedule 04.05.2015
comment
Он должен принимать только один параметр, верно? Так что избавьтесь от @EndDate и просто ограничьте viewing.date = @StartDate   -  person APH    schedule 04.05.2015


Ответы (3)


Я не понимаю.
Описанные вами таблицы даже не упоминаются в хранимой процедуре.
Как вы ожидаете, что это будет работать?

Вы должны использовать INNER JOIN во всех трех таблицах и сравнить столбец Date в таблице Viewing с вашей переменной @Date в предложении WHERE.
В основном это должно выглядеть примерно так:

SELECT *
FROM Table1 T1
INNER JOIN Table2 T2 ON(T1.JoinColumn = T2.JoinColumn)
INNER JOIN Table3 T3 ON(T2.OtherJoinColumn = T3.JoinColumn)
WHERE Table3.ConditionColumn = @Date

Теперь все, что вам нужно сделать, это выяснить, как разместить ваши таблицы и столбцы в этом sql-выражении, а не в моих макетах.
Удачи.

person Zohar Peled    schedule 04.05.2015
comment
Я не думаю, что они написали код, который они включили - я думаю, что он был скопирован из чьего-то аналогичного вопроса, и они просят нас изменить его для их ситуации. - person APH; 05.05.2015
comment
@aphrael, возможно, но если это не проект о том, как заставить других людей делать вашу домашнюю работу, мой ответ будет более полезным для OP, чем просто предоставление ему полного и проверенного решения. Насколько мне известно, программирование изучается с помощью пальцев. - person Zohar Peled; 05.05.2015
comment
Полностью согласен. Просто комментирую первый абзац вашего ответа. - person APH; 05.05.2015
comment
Привет, ребята, спасибо всем за помощь однокурснику! Я пробовал его метод, конечный результат: ALTER PROCEDURE Renter_Property_Info_by_Date @Date datetime SELECT * FROM Renter T1 INNER JOIN Просмотр T2 ON (T1.Rno = T2.Rno) INNER JOIN Property_for_Rent T3 ON (T2.Pno = T3.Pno) WHERE Просмотр .Pno = Дата НАЧАЛА - person Glen; 06.05.2015
comment
и даже без Go все равно ошибки: Неправильный синтаксис рядом с ключевым словом «SELECT». Глядя на этот код Zohar, он все еще не предоставляет то, что нужно, как вы видите выше, у меня есть 3 таблицы для использования Property_For_Rent: Pno (это идентификатор), Renter: Rno (идентификатор арендатора), Fname, Lname и просмотр: Pno, Rno, Дата, комментарий. Если бы вы могли помочь с приведенным выше кодом, который связывает pno с rno и комментариями, используя хранимую процедуру DATE. Большое спасибо, я очень ценю это - person Glen; 06.05.2015
comment
Все ребята разобраны !! Апраэль и Зохар Пелед Юс потрясающие! - person Glen; 06.05.2015
comment
Рад помочь. Отметьте ответ как принятый или напишите окончательное решение и примите его, чтобы люди знали, что проблема решена. - person Zohar Peled; 06.05.2015

Реализации SQL не совпадают. Не все они используют в точности один и тот же синтаксис, и не все реализуют в точности одни и те же вещи. Например, MS-Access (насколько мне известно) вообще не поддерживает хранимые процессы. (Но он знает, как отправлять запросы и DML-команды соответствующим серверам, которые это делают.)

Такие как, например, «SQL Server!» :-) Microsoft действительно предоставляет бесплатно "SQL Server Express", который является (большей частью ...) SQL Server, предназначенным для использования на одной машине. Используя этот инструмент, вы сможете воспроизвести практически ту же среду, которую вы ожидаете использовать в лаборатории. И, конечно же, MS-Access - прекрасный инструмент для "доступа" к тому, что вы сделали.

person Mike Robinson    schedule 04.05.2015
comment
Хотя это правда, это никоим образом не отвечает на вопрос. Кроме того, я прокомментировал вопрос по этой же проблеме за 40 минут до того, как вы написали этот пост. - person Zohar Peled; 05.05.2015

Поскольку вы работаете с типом данных datetime, вы должны учитывать время суток.

 where shippedDate >= @dateParameter
 and shippedDate < DateAdd(day, 1, @dateParameter)

Привыкайте к этому подходу при работе с типами данных, которые включают дату и время.

person Dan Bracuk    schedule 04.05.2015