存储过程 - 日期

时间:2015-05-04 20:40:05

标签: sql sql-server parameters procedure

在需要简单存储过程的大学项目过程中:

  

创建一个存储过程,该过程接受一个接受Date的参数。 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

3 个答案:

答案 0 :(得分:1)

我不明白。
您描述的表格甚至没有在存储过程中提及 你期望它如何运作?

您应该在所有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语句而不是我的模型。
祝你好运。

答案 1 :(得分:0)

SQL实现不一样。他们并非都使用完全相同的语法,并且他们并没有全部实现完全相同的东西。例如,MS-Access(据我所知)根本不提供存储过程。 (但它确实知道如何向做的适当服务器发出查询和DML命令。

例如,“SQL Server!” :-) Microsoft 免费提供“SQL Server Express”, (大部分......)SQL Server,专为在一台机器上使用而设计。使用此工具,您应该能够复制几乎与实验室中预期使用的环境相同的环境。当然,MS-Access是一个非常好的工具,用于“访问”你所做的事情。

答案 2 :(得分:0)

由于您使用的是datetime数据类型,因此必须考虑时间。

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

在处理包含日期和时间的数据类型时,习惯这种方法。