2017-03-06 142 views
0

你好在存储过程中,我创建一个临时表填充选择至极执行函数返回日期重现。存储过程临时表与参数

我的临时表的创建如下:

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 * * *'由任务表中的字段(字段名为recurrence),所以我怎么能这样做呢?

谢谢!

编辑

其实,在我的询问,我想调用的函数“CrontabSchedule”,并把在参数字段从“使命”表是这样的:

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') 

但是,当我替换 '0 0 * * *' 由 'Mission.recurrence'(其包含的每个任务的循环模式)中,i具有一个错误:

无法绑定多部分标识符“Mission.recurrence”。

CrontabSchedule代码:

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' 一列包含日期列表。

+0

只是不''选择*'并只选择你想要的字段吗?或者我错过了什么? –

+0

你在寻找一个表值函数吗? –

+0

请参阅以下链接以了解如何提出完美问题:https://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/ – TheGameiswar

回答

1

这里很含糊的问题,但我假设CronTabSchedule必须是一个表值函数(希望是一个内联版本,但这是另一个主题)。如果我是正确的,你可以很容易地使用CROSS APPLY。

select * 
from mission m 
cross apply dbo.CronTabSchedule(m.reccurence,'2017-1-1','2017-1-31') cts 
+0

它的工作原理!谢谢 ! –