Làm thế nào để máy chủ sql xác định nếu một chức năng là xác định hay không?
Hãy xem xét hàm sau, tôi nghĩ nó có tính xác định (vì cuối cùng nó là một phép toán số nguyên), nhưng máy chủ sql trả về 0 khi tôi gọi phương thức objectproperty trên nó.
Hiểu cách thức hoạt động của nó sẽ giúp tôi hiểu lý do tại sao tôi đánh giá sai chức năng này.
CREATE FUNCTION dbo.EndOfPreviousMonth ( @Date date )
RETURNS date
AS BEGIN
RETURN DATEADD(day, 0 - DAY(@Date), @Date);
END;
SELECT dbo.EndOfPreviousMonth('2010-01-01'); --Usage example
--Returns 0, I expected it to return 1
SELECT OBJECTPROPERTY( OBJECT_ID( 'dbo.EndOfPreviousMonth' ), 'IsDeterministic' );
Không, tôi không nghĩ vậy. Tôi đoán đó là để nói rằng tôi đã không thiết lập chế độ tương thích.
—
Brian Dishaw
DATEADD
mang tính quyết định.)