Просто трябва да го създадете with schemabinding
.
След това SQL Server ще провери дали отговаря или не на критериите, за да се счита за детерминистичен (което прави, тъй като няма достъп до никакви външни таблици или използва недетерминистични функции като getdate()
).
Можете да проверите дали работи с
SELECT OBJECTPROPERTY(OBJECT_ID('[dbo].[FullNameLastFirst]'), 'IsDeterministic')
Добавянето на опцията schemabinding към вашия оригинален код работи добре, но би била малко по-опростена версия.
CREATE FUNCTION [dbo].[FullNameLastFirst] (@IsPerson BIT,
@LastName NVARCHAR(100),
@FirstName NVARCHAR(100))
RETURNS NVARCHAR(201)
WITH SCHEMABINDING
AS
BEGIN
RETURN CASE
WHEN @IsPerson = 0
OR @FirstName = '' THEN @LastName
ELSE @LastName + ' ' + @FirstName
END
END