Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Cara mengatur opsi maxrecursion untuk CTE di dalam Fungsi Bernilai-Tabel

Dari utas forum MSDN ini saya mengetahui bahwa

[yang] OPTION klausa hanya dapat digunakan pada tingkat pernyataan

Jadi Anda tidak dapat menggunakannya dalam ekspresi kueri di dalam definisi tampilan atau TVF sebaris, dll. Satu-satunya cara untuk menggunakannya dalam kasus Anda adalah dengan membuat TVF tanpa OPTION klausa dan tentukan dalam kueri yang menggunakan TVF. Kami memiliki bug yang melacak permintaan untuk mengizinkan penggunaan OPTION klausa di dalam ekspresi kueri apa pun (misalnya, if exists() atau CTE atau lihat).

dan selanjutnya

Anda tidak dapat mengubah nilai default opsi itu di dalam udf. Anda harus melakukannya dalam pernyataan yang merujuk pada udf.

Jadi dalam contoh Anda, Anda harus menentukan OPTION saat Anda menelepon fungsi Anda:

 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
 )

(nanti)

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

Perhatikan bahwa Anda tidak dapat mengatasi ini dengan memiliki TVF kedua yang hanya melakukan baris di atas - Anda mendapatkan kesalahan yang sama, jika Anda mencoba. "[yang] OPTION klausa hanya dapat digunakan pada tingkat pernyataan", dan itu final (untuk saat ini).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Fungsi yang Ditentukan Pengguna SQL Server

  2. Mengapa saya tidak bisa menggunakan alias dalam pernyataan DELETE?

  3. Rilis Baru:Paket Penyetelan Spotlight 7.1.9

  4. Kesalahan SQL Server pada perintah pembaruan - Kesalahan parah terjadi pada perintah saat ini

  5. Bisakah saya memiliki kunci asing yang mereferensikan kolom dalam tampilan di SQL Server?