我们有一个包含几个步骤的工作,并且几乎所有步骤都使用getdate()
,但是我们想从特定的表和列中获取日期。该表仅包含两列status
(已准备好(不变)和statusdate
(动态)。计划是创建一个存储过程,并用该存储过程替换getdate()
。
如何编写存储过程?如何声明变量?
CREATE PROCEDURE SP_DATE
@StatusDate DATETIME
AS
BEGIN
SELECT StatusDate
FROM [DB_Name].[dbo].[Table_Name]
WHERE status = ready
END
谢谢!
答案 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中有很多漏洞和问题,但您可能会想一想为什么您的问题暗示没有参数。您将需要一种方式来标记一天“完成”,否则它将一遍又一遍。