用存储过程替换Getdate()

时间:2019-02-12 01:32:24

标签: sql-server tsql stored-procedures

我们有一个包含几个步骤的工作,并且几乎所有步骤都使用getdate(),但是我们想从特定的表和列中获取日期。该表仅包含两列status(已准备好(不变)和statusdate(动态)。计划是创建一个存储过程,并用该存储过程替换getdate()

如何编写存储过程?如何声明变量?

CREATE PROCEDURE SP_DATE
    @StatusDate DATETIME
AS 
BEGIN
    SELECT StatusDate 
    FROM [DB_Name].[dbo].[Table_Name]
    WHERE status = ready 
END

谢谢!

2 个答案:

答案 0 :(得分:1)

您的作业使用getdate() function ,因此为了用自定义编程对象替换它,您还应该使用 function ,而不是存储过程。具有这样的功能

CREATE FUNCTION dbo.StatusDate ()
RETURNS DATETIME
AS
BEGIN
  RETURN (SELECT
      StatusDate
    FROM Table_Name
    WHERE status = 'ready')
END

您可以直接替换getdate

SELECT
  id
FROM Your_Job_List yjl
WHERE yjl.aDate < dbo.StatusDate()--getdate()

然而,设计存在一些问题。 RDBMS的最大一项任务是联接表,也许与下一个查询类似的查询可能更好

SELECT
  id
FROM Your_Job_List yjl
    ,Table_Name tn
WHERE yjl.aDate < tn.StatusDate
AND tn.status = 'ready'

答案 1 :(得分:0)

CREATE PROCEDURE spRunNextDate
AS 
BEGIN

  --SET NOCOUNT ON 

   declare @runDate datetime 
   select @runDate = MIN(StatusDate)
     from [DB_Name].[dbo].[Table_Name] 
    where [status] = 'ready'

   IF (@runDate IS NULL) 
   BEGIN
      PRINT 'NO Dates in Ready State.'
      RETURN 0
   END

   PRINT 'Will Run Date of '  + CAST(@runDate as varchar(20)) 

   -- Notice the MIN  or MAX usage above to get only one date per "run"


END      
GO

上面我的冒昧sp中有很多漏洞和问题,但您可能会想一想为什么您的问题暗示没有参数。您将需要一种方式来标记一天“完成”,否则它将一遍又一遍。