Вам просто нужно создать его 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