sql >> データベース >  >> RDS >> Sqlserver

Table-Valued-Function内のCTEのmaxrecursionオプションを設定する方法

    このMSDNフォーラムのスレッドから私はそれを学びます

    [the] OPTION 句はステートメントレベルでのみ使用できます

    したがって、ビュー定義内のクエリ式やインラインTVFなどで使用することはできません。この場合に使用する唯一の方法は、OPTIONなしでTVFを作成することです。 句を指定し、TVFを使用するクエリで指定します。 OPTIONの使用を許可するリクエストを追跡するバグがあります クエリ式内の句(たとえば、if exists() またはCTEまたはビュー)。

    そしてさらに

    udf内でそのオプションのデフォルト値を変更することはできません。 udfを参照するステートメントでそれを行う必要があります。

    したがって、この例では、OPTIONを指定する必要があります 電話するとき あなたの機能:

     CREATE FUNCTION [liste_jour]  
     (@debut date,@fin date)
     RETURNS TABLE
     AS     
     RETURN      
     (  
      WITH CTE as(       
      SELECT @debut as jour       
      UNION  ALL       
      SELECT DATEADD(day, 1, jour)       
      FROM   CTE      
      WHERE  DATEADD(day, 1, jour) <= @fin)
      SELECT jour FROM CTE -- no OPTION here
     )
    

    (後で)

    SELECT * FROM [liste_jour] ( @from , @to ) OPTION ( MAXRECURSION 365 )
    

    上記の行を実行する2番目のTVFを使用してこれを回避することはできないことに注意してください。試してみると、同じエラーが発生します。 "[the] OPTION 句はステートメントレベルでのみ使用できます」、そしてそれは(今のところ)最後です。



    1. MariaDBを使用したLDAP認証とグループマッピングの構成

    2. Oracleでタイムゾーンを変更する4つの方法

    3. SQLServerでテーブルを作成する方法

    4. Oracleは更新動作を選択します