Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL Server 2014中创建介于两个日期之间的存储过程_Sql_Sql Server_Stored Procedures_Sql Server 2014 - Fatal编程技术网

在SQL Server 2014中创建介于两个日期之间的存储过程

在SQL Server 2014中创建介于两个日期之间的存储过程,sql,sql-server,stored-procedures,sql-server-2014,Sql,Sql Server,Stored Procedures,Sql Server 2014,我对SQL Server完全是个新手。我正在尝试创建一个存储过程,您可以在两个日期之间进行搜索。我想让我的主管读一下 EXEC Procedure TimeSheetIndexSearch (Date, Date) (在这种情况下,您应该在运行EXEC之前输入日期 CREATE PROCEDURE TimesheetIndexSearch AS SELECT Timesheets.Hours AS Hours, Timesheets.DateWorked

我对SQL Server完全是个新手。我正在尝试创建一个存储过程,您可以在两个日期之间进行搜索。我想让我的主管读一下

EXEC Procedure TimeSheetIndexSearch (Date, Date)
(在这种情况下,您应该在运行EXEC之前输入日期

CREATE PROCEDURE TimesheetIndexSearch
AS
   SELECT 
       Timesheets.Hours AS Hours, 
       Timesheets.DateWorked AS DateWorked, 
       Timesheets.Description AS Description,
       Timesheets.Id AS Id, 
       Users.Name AS UserName, 
       Projects.Name AS ProjectName
   FROM   
       Timesheets
   INNER JOIN 
       Users ON Timesheets.UserId = Users.Id
   INNER JOIN 
       Projects ON Timesheets.ProjectId = Projects.Id;
只有一个日期列(没有begindate或enddate)。我是使用
Where
?还是使用
Order By
?谢谢!

给你:

CREATE PROCEDURE TimesheetIndexSearch (@Start DATETIME, @End DATETIME)
AS
SELECT Timesheets.Hours AS Hours
       , Timesheets.DateWorked AS DateWorked
       , Timesheets.Description AS Description
       , Timesheets.Id AS Id
       , Users.Name AS UserName
       , Projects.Name AS ProjectName
FROM   Timesheets
       INNER JOIN Users ON Timesheets.UserId = Users.Id
       INNER JOIN Projects ON Timesheets.ProjectId = Projects.Id
WHERE  Timesheets.DateWorked >= @Start
       AND Timesheets.DateWorked <= @End;
只需小心处理
之间的
,因为它包含了变量中的日期,第一种方法更简洁,更易于所有人阅读

运行您将使用的进程

EXEC TimesheetIndexSearch '2015-01-01','2015-01-10'
给你:

CREATE PROCEDURE TimesheetIndexSearch (@Start DATETIME, @End DATETIME)
AS
SELECT Timesheets.Hours AS Hours
       , Timesheets.DateWorked AS DateWorked
       , Timesheets.Description AS Description
       , Timesheets.Id AS Id
       , Users.Name AS UserName
       , Projects.Name AS ProjectName
FROM   Timesheets
       INNER JOIN Users ON Timesheets.UserId = Users.Id
       INNER JOIN Projects ON Timesheets.ProjectId = Projects.Id
WHERE  Timesheets.DateWorked >= @Start
       AND Timesheets.DateWorked <= @End;
只需小心处理
之间的
,因为它包含了变量中的日期,第一种方法更简洁,更易于所有人阅读

运行您将使用的进程

EXEC TimesheetIndexSearch '2015-01-01','2015-01-10'

不要为此创建存储过程。创建一个存储函数。这是一个更通用的方法,因为您可以在
select
from
子句中使用它:

CREATE FRUN TimesheetIndexSearch (
    @Start date,
    @End date
)
RETURNS table
AS
    RETURN (SELECT ts.Hours AS Hours, ts.DateWorked AS DateWorked,              
                   ts.Description AS Description,
                   ts.Id AS Id, u.Name AS UserName, p.Name AS ProjectName
            FROM Timesheets ts INNER JOIN
                 Users u
                 ON ts.UserId = u.Id INNER JOIN
                 Projects p
                 ON ts.ProjectId = p.Id
            WHERE ts.DateWorked >= @Start AND ts.DateWorked <= @End
           );

另外,请注意使用表别名如何使查询更易于编写和读取。

不要为此创建存储过程。创建存储函数。这是一个更通用的方法,因为您可以在
选择的
from
子句中使用它:

CREATE FRUN TimesheetIndexSearch (
    @Start date,
    @End date
)
RETURNS table
AS
    RETURN (SELECT ts.Hours AS Hours, ts.DateWorked AS DateWorked,              
                   ts.Description AS Description,
                   ts.Id AS Id, u.Name AS UserName, p.Name AS ProjectName
            FROM Timesheets ts INNER JOIN
                 Users u
                 ON ts.UserId = u.Id INNER JOIN
                 Projects p
                 ON ts.ProjectId = p.Id
            WHERE ts.DateWorked >= @Start AND ts.DateWorked <= @End
           );

另外,请注意使用表别名如何使查询更易于编写和读取。

欢迎这样做。这里的挑战是,我们不知道您希望它做什么。您是否希望返回DateWorked位于两个日期值之间的行?无论查询本身如何,您这样做的方式是使用参数。快速谷歌搜索将提供数十万个带参数的存储过程示例。您需要确定的是,如果您使用的是mysql或sqlserver,它们不是同一件事。
…其中DateWorked介于@StartDate和@EndDate之间
特别是对于新手,我会谨慎处理。非常好。感谢您的帮助。我正在做一个大量的谷歌搜索,但它们没有加起来。我感谢你的耐心。我不知道为什么有人否决了这个问题。很明显,OP对这个问题非常陌生,并且尽了最大努力解释了他们想要什么。有些人有时会对一些事情进行否决。欢迎你这么做。这里的挑战是我们不知道你想让这个问题变成什么o、 您需要返回DateWorked位于两个日期值之间的行吗?无论查询本身如何,都需要使用参数。快速的google搜索将提供数十万个带有参数的存储过程示例。您需要确定的是,如果您使用的是mysql或sqlserver,它们不是同样的事情。
…Date在@StartDate和@EndDate之间起作用的地方
特别是对于新手,我会谨慎处理。非常好。谢谢你的帮助。我做了大量的谷歌搜索,但它们没有加起来。我感谢你的耐心。我不知道为什么有人否决了这个问题。很明显,OP对我来说是非常新的这也尽了他们最大的努力解释了他们想要什么。有些人有时会因为一些事情而对投票结果大发雷霆。看起来我走上了正确的轨道!谢谢你的帮助。非常简单,真的。看起来我走上了正确的轨道!谢谢你的帮助。非常简单,真的。