2009-02-16 30 views
5

Tùy chọn "RETURNS NULL ON NULL INPUT" cho UDF vô hướng (xem CREATE FUNCTION) dừng chức năng thực thi nếu tham số rỗng và trả về NULL.NULL trong vô hướng UDF trên MSSQL

Tức là, nó ngắn mạch.

Có ai biết cách xử lý nhiều thông số không?

Sẽ hữu ích khi rút ngắn cuộc gọi hàm với nhiều tham số, nếu số ít nhất là NULL ít nhất.

Khi tôi có thời gian, tôi sẽ sử dụng profiler để thử và theo dõi các cuộc gọi udf. Tôi đã tìm kiếm nhưng không thể tìm thấy bất cứ điều gì .. nhiều khả năng tôi có thể không sử dụng cụm từ tìm kiếm chính xác.

Trong thời gian chờ đợi, có ai có bất kỳ ý tưởng hoặc trải nghiệm nào không?

câu trả lời từ các thế giới RDBMS khác được hoan nghênh quá .. đây là một thiết lập ANSI và tôi thấy kết quả cho DB2 và MySQL trong tìm kiếm của tôi

Chỉnh sửa, dựa trên nhận xét: Đối với chỉ chức năng phi CLR

Chúc mừng S

Chỉnh sửa: Tôi không cần chạy hồ sơ. Doh! Điều này cho thấy các hành vi:

CREATE FUNCTION dbo.ufnTest (
    @dummy tinyint 
) 
RETURNS tinyint 
WITH RETURNS NULL ON NULL INPUT 
AS 
BEGIN 
    RETURN 1 
END 
GO 
SELECT dbo.ufnTest(0), dbo.ufnTest(NULL) 
GO 


ALTER FUNCTION dbo.ufnTest (
    @dummy tinyint 
) 
RETURNS tinyint 
--WITH RETURNS NULL ON NULL INPUT 
AS 
BEGIN 
    RETURN 1 
END 
GO 
SELECT dbo.ufnTest(0), dbo.ufnTest(NULL) 
GO 


ALTER FUNCTION dbo.ufnTest (
    @dummy tinyint, 
    @dummy2 tinyint 
) 
RETURNS tinyint 
WITH RETURNS NULL ON NULL INPUT 
AS 
BEGIN 
    RETURN 1 
END 
GO 
SELECT dbo.ufnTest(0, 2), dbo.ufnTest(NULL, 2), dbo.ufnTest(0, NULL) 
GO 


ALTER FUNCTION dbo.ufnTest (
    @dummy tinyint, 
    @dummy2 tinyint 
) 
RETURNS tinyint 
--WITH RETURNS NULL ON NULL INPUT 
AS 
BEGIN 
    RETURN 1 
END 
GO 
SELECT dbo.ufnTest(0, 2), dbo.ufnTest(NULL, 2), dbo.ufnTest(0, NULL) 
GO 

Trả lời

9

, một chức năng mà xác định RETURNS NULL ON NULL INPUT sẽ ngắn mạch nếu bất kỳ của pa của nó đường kính là NULL.

documentation đề xuất điều này, mặc dù không rõ ràng và dường như chỉ đề cập đến các hàm CLR. (Tôi nghĩ rằng đây là nỗ lực của Microsoft để làm rõ rằng NULL hành vi quy định tại CREATE FUNCTION sẽ ghi đè lên OnNullCall thuộc tính vào phương pháp CLR.)

Tôi đã thử nghiệm này với các chức năng phi CLR trong cả SQL2005 và SQL2008 và nó ngắn mạch chính xác như mong đợi.

+0

Hữu ích khi biết. Tôi có một số chuỗi UDF thao tác chuỗi có thể được hưởng lợi từ tài liệu này – Kristen

+1

Tài liệu MSDN cần được cải thiện trong trường hợp này, để chắc chắn ! – gotqn

2

Có ai biết làm thế nào nó xử lý nhiều thông số?

là lời giải thích trong liên kết của bạn đủ, hoặc bạn đang tìm cách khác?

Nếu trả về NULL ON NULL đầu vào là quy định tại một hàm CLR, nó chỉ ra rằng SQL Server có thể trở lại NULL khi bất kỳ trong những lập luận nó nhận là NULL, mà không thực sự cách gọi thân chức năng

+0

Đối với các chức năng không phải CLR ... – gbn

+0

@gbn: RETURNS NULL ON NULL INPUT chỉ áp dụng cho các hàm CLR. – casperOne

+0

Tôi biết nó ngắn mạch cho tham số duy nhất không CLR. Bạn lấy thông tin ở đâu? – gbn

Các vấn đề liên quan