2014-03-06 148 views
1

我在SQL Server 2008中运行以下查询,该查询返回01/01/2014后的数据项。执行SQL Server日期范围选择

如何更改查询以提示日期范围执行,以便我可以在特定日期之间返回数据?我最终希望将其创建为数据库视图并通过MS Excel运行查询。

SELECT J_CODATE as Typed_Date, 
     J_CRDATE as Created_Date, 
     J_AUTHOR as Author_Id, 
     CAST(A_FNAME + ' ' + A_SURNAME AS NVARCHAR) AS Author_Name, 
     J_JNUMBER as Job_Number, 
     J_SRSTATUS as SR_Status, 
     J_LENGTH as Job_Length, 
     J_TRANTIME as Typing_Time, 
     J_TRANS as Typist_id, 
     CAST(T_FNAME + ' ' + T_SURNAME AS NVARCHAR) AS Typist_Name, 
     CAST(J_TRANTIME AS FLOAT)/CAST(Job.J_LENGTH AS FLOAT) AS Productivity_Factor 
    FROM author, job, trans 
    WHERE J_CODATE >= '2014-01-01 00:00:00' 
     and J_LENGTH > 0 and J_TRANTIME > 1 and J_SRSTATUS > 0 
     and (Cast(J_LENGTH as Float)/Cast(J_TRANTIME as Float)) < 2 
     and (Cast(J_TRANTIME as Float)/Cast(J_LENGTH as Float)) < 20 
     and Job.J_TRANS = Trans.T_ID 
     and Job.J_AUTHOR = author.A_ID 
    ORDER BY J_CODATE desc 

感谢

回答

0

所以,你的目标是通过Excel来访问数据库中的数据,并让Excel提示您输入的参数?

有没有办法建立到查询提示您参数的能力。提示符在哪里出现 - 在服务器的屏幕上?如果执行查询的程序是Windows服务或其他没有UI的进程,会发生什么?

您可以在MS Access中执行此操作,因为Access既是数据库又是用于操作该数据库的UI。但即使在Access中,如果Access可执行文件以外的其他应用程序试图使用该数据库,那么在该程序中不会提示参数:如果在程序尝试时未提供参数,则只会收到异常执行查询。

所以这至少是Excel问题的一半。我不确定Excel的数据工具是否包含提示您输入参数的功能,尽管我希望它可以。但是你必须对此进行研究。

要解决您的问题的SQL Server部分:可能最简单的方法来参数化您的查询将创建一个存储过程,该Excel将通过其数据工具为您执行。它应该是这样的:

CREATE PROCEDURE dbo.TestProcedure 
(
    @StartDate datetime, 
    @EndDate datetime 
) 
AS 
    SELECT J_CODATE as Typed_Date, 
      J_CRDATE as Created_Date, 
      J_AUTHOR as Author_Id, 
      CAST(A_FNAME + ' ' + A_SURNAME AS NVARCHAR) AS Author_Name, 
      J_JNUMBER as Job_Number, 
      J_SRSTATUS as SR_Status, 
      J_LENGTH as Job_Length, 
      J_TRANTIME as Typing_Time, 
      J_TRANS as Typist_id, 
      CAST(T_FNAME + ' ' + T_SURNAME AS NVARCHAR) AS Typist_Name, 
      CAST(J_TRANTIME AS FLOAT)/CAST(Job.J_LENGTH AS FLOAT) AS Productivity_Factor 
    FROM author, job, trans 
    WHERE J_CODATE BETWEEN @StartDate and @EndDate 
    and J_LENGTH > 0 and J_TRANTIME > 1 and J_SRSTATUS > 0 
    and (Cast(J_LENGTH as Float)/Cast(J_TRANTIME as Float)) < 2 
    and (Cast(J_TRANTIME as Float)/Cast(J_LENGTH as Float)) < 20 
    and Job.J_TRANS = Trans.T_ID 
    and Job.J_AUTHOR = author.A_ID 
    ORDER BY J_CODATE desc 

如果看起来很像您的查询,这是因为它是:除了在存储过程中包装它,我转身字面你使用到的参数@StartDate@EndDate日期,因为你说你想要一个日期范围。