2017-03-06 178 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

它的工作原理!謝謝 ! –