Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да зададете опцията maxrecursion за CTE вътре във функция с таблично стойност

От тази тема на MSDN форумите научавам, че

[] OPTION клаузата може да се използва само на ниво израз

Така че не можете да го използвате в израз на заявка в дефинициите на изглед или вградени TVF и т.н. Единственият начин да го използвате във вашия случай е да създадете TVF без OPTION клауза и я посочете в заявката, която използва 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 )

Имайте предвид, че не можете да заобиколите това, като имате втори TVF, който просто изпълнява горния ред - получавате същата грешка, ако опитате. „[] OPTION клаузата може да се използва само на ниво изявление", и това е окончателно (засега).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Най-бързият начин за извършване на вложени групови вмъквания с използване на scope_identity()?

  2. SQL OVER() клаузата – кога и защо е полезна?

  3. SQL Server Standard Edition High Availability Futures

  4. Вътрешни елементи на SQL Server:Проблемни оператори Pt. III – Сортове

  5. Как да прехвърляте или експортирате данни от SQL Server 2005 в Excel