【发布时间】:2017-03-06 13:59:23
【问题描述】:
您好,在存储过程中,我创建了一个临时表,其中填充了一个选择,它执行一个函数以返回日期重复。
我的临时表的创建如下所示:
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”并将“任务”表中的一个字段放入参数中,如下所示:
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' (其中包含每个任务的重复模式)时,我有一个错误:
无法绑定多部分标识符“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”,并包含一个日期列表。
【问题讨论】:
-
只是不要
select *并且只选择您想要的字段?还是我错过了什么? -
您在寻找表值函数吗?
-
查看参考链接以了解如何提出完美问题:spaghettidba.com/2015/04/24/…
-
这取决于
dbo.CrontabSchedule的工作方式以及您如何定义#tmp_recu。你能告诉我们他们两个吗?一个可能的解决方案是编辑dbo.CrontabSchedule以首先返回您的值,我们可以更改函数定义还是您想要单独的查询? -
我已经编辑了更多信息
标签: sql sql-server stored-procedures temp-tables