2017-03-06 8 views
0

こんにちはストアドプロシージャでは、私は、テンポラリテーブルを作成して、選択した日付を繰り返し返す関数を実行します。パラメータ付きのストアドprocテンポラリテーブル

私の一時テーブルの作成は次のようになります。この一時テーブルを作成した後

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 * * *'を書き換えたいのですが、どうすればいいのですか?

ありがとうございます!

select * from mission m 
cross join select * from dbo.CronTabSchedule(mission.reccurence,'2017-1-1','2017-1-31') 

それは動作します:

EDIT

実は、私のクエリで、私はこのような使命 'テーブルからパラメータのフィールドを置く関数「CrontabSchedule」と呼びたいと思います私はこの

select * from dbo.CronTabSchedule('0 0 * * *','2017-1-1','2017-1-31') 

のような関数を呼び出したが、私は(各ミッションの定期的なパターンが含まれている)「Mission.recurrence」で、「0 0 * * *」を置換するとき、私はエラーを持っている:

マルチパート識別子「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] 

関数 '出現' という名前の列を持つテーブルを返すと日付のリストAが含まれています。

+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

それは動作します!ありがとう! –

関連する問題