在存储过程中,我创建一个临时表,其中填充了一个选择,该选择执行一个函数以返回日期重现。
我的临时表的创建如下所示:
BEGIN
insert into #tmp_recu
SELECT * FROM dbo.CrontabSchedule('0 0 * * *', '2017-2-1', '2017-2-28')
END
创建此临时表后,我使用此临时表执行查询,如下所示:
Select * from mission
Cross Join #temp_recu
问题是我想用任务表中的字段(名为递归的字段)替换临时表创建中的“0 0 * * *”,那么我该怎么做?
谢谢!
编辑
实际上,在我的查询中,我想调用函数“CrontabSchedule”并在参数中放入“mission”表中的字段,如下所示:
select * from mission m
cross join select * from dbo.CronTabSchedule(mission.reccurence,'2017-1-1','2017-1-31')
当我像这样调用函数时它就起作用了
select * from dbo.CronTabSchedule('0 0 * * *','2017-1-1','2017-1-31')
但是当我用“Mission.recurrence”(包含每个任务的重复模式)替换“0 0 * * *”时,出现错误:
无法绑定多部分标识符“Mission.recurrence”。
Crontab调度代码:
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
ALTER FUNCTION [dbo].[CrontabSchedule](@Expression [nvarchar](100), @Start[datetime], @End [datetime])
RETURNS TABLE (
[Occurrence] [datetime] NULL
) WITH EXECUTE AS CALLER
AS
EXTERNAL NAME [NCrontabSQL].[NContab.SQL.SqlCrontab].[GetOccurrences]
该函数返回一个表,其中有一列名为“Occurence”,并包含日期列表。
这里有一个相当模糊的问题,但我假设 CronTabSchedule 必须是一个表值函数(希望是内联版本,但这是另一个主题)。如果我是正确的,你可以很容易地使用 CROSS APPLY 来实现这一点。
select *
from mission m
cross apply dbo.CronTabSchedule(m.reccurence,'2017-1-1','2017-1-31') cts