Từ chuỗi diễn đàn MSDN này, tôi biết rằng
[the]
OPTION
mệnh đề chỉ có thể được sử dụng ở cấp câu lệnhVì vậy, bạn không thể sử dụng nó trong biểu thức truy vấn bên trong định nghĩa chế độ xem hoặc TVF nội tuyến, v.v. Cách duy nhất để sử dụng nó trong trường hợp của bạn là tạo TVF mà không có
OPTION
và chỉ định nó trong truy vấn sử dụng TVF. Chúng tôi có một lỗi theo dõi yêu cầu cho phép sử dụngOPTION
mệnh đề bên trong bất kỳ biểu thức truy vấn nào (ví dụ:if exists()
hoặc CTE hoặc chế độ xem).
và xa hơn nữa
Bạn không thể thay đổi giá trị mặc định của tùy chọn đó trong udf. Bạn sẽ phải làm điều đó trong tuyên bố tham chiếu đến udf.
Vì vậy, trong ví dụ của bạn, bạn phải chỉ định OPTION
khi bạn gọi chức năng của bạn:
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
)
(sau)
SELECT * FROM [liste_jour] ( @from , @to ) OPTION ( MAXRECURSION 365 )
Lưu ý rằng bạn không thể giải quyết vấn đề này bằng cách có TVF thứ hai giống như dòng trên - bạn sẽ gặp lỗi tương tự, nếu bạn cố gắng. "[the] OPTION
mệnh đề chỉ có thể được sử dụng ở cấp câu lệnh "và đó là mệnh đề cuối cùng (hiện tại).