Đây là một chức năng thực sự đơn giản, nó trở lại xác định. Nếu tôi biên dịch nó, nó không còn xác định nữa. Làm thế nào tôi có thể làm cho nó có nguồn gốc được biên dịch và xác định?Làm thế nào để làm cho SQL bộ nhớ tối ưu hóa bản địa hóa chức năng xác định
CREATE FUNCTION [hash].[HashDelimiter2]()
RETURNS NCHAR(1)
WITH SCHEMABINDING
AS BEGIN
RETURN N';'
END
GO
/* This does indeed result in YES */
SELECT IS_DETERMINISTIC
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_NAME = 'HashDelimiter2'
/* But then compile it native and it's no longer deterministic */
CREATE FUNCTION [hash].[HashDelimiter3]()
RETURNS NCHAR(1)
WITH NATIVE_COMPILATION, SCHEMABINDING
AS BEGIN ATOMIC WITH (
TRANSACTION ISOLATION LEVEL = SNAPSHOT,
LANGUAGE = N'English'
)
RETURN N';'
END
GO
/* This results in NO */
SELECT IS_DETERMINISTIC
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_NAME = 'HashDelimiter3'
Bạn đã tìm thấy BẤT K sp sprocs nào có nguồn gốc quay trở lại như xác định? – dfundako
Tôi không tìm thấy bất kỳ hàm gốc xác định nào, tất cả chúng tôi viết đều không xác định được. –
chỉ cần đoán, vì [tài liệu] (https://msdn.microsoft.com/en-us/library/ms178091.aspx) không cho biết chi tiết này: bạn đã loại bỏ phần 'ATOMIC WITH' là nguyên nhân? việc thiết lập mức cô lập giao dịch có thể ảnh hưởng đến trạng thái toàn cầu và đủ điều kiện cho tính không xác định. btw. Phiên bản bạn đang sử dụng? – dlatikay