带参数的存储过程临时表

问题描述 投票:0回答:1

在存储过程中,我创建一个临时表,其中填充了一个选择,该选择执行一个函数以返回日期重现。

我的临时表的创建如下所示:

    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”,并包含日期列表。

sql sql-server stored-procedures temp-tables
1个回答
1
投票

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

select * 
from mission m
cross apply dbo.CronTabSchedule(m.reccurence,'2017-1-1','2017-1-31') cts
© www.soinside.com 2019 - 2024. All rights reserved.