SQL Server 10.50.1600Детерминированная функция не является детерминированной
Я пытаюсь использовать функцию скалярного значения в вычисленном столбце. Затем я хочу создать индекс для этого.
ALTER TABLE [dbo].[Modified]
ADD [StartQDate] AS ([dbo].[QDay]([StartDT])) PERSISTED,
[EndQDate] AS ([dbo].[QDay]([EndDT])) PERSISTED;
При попытке создания вычисленного столбца я получаю следующую ошибку.
Вычисленный столбец «StartQDate» в таблице «Модифицированный» не может быть сохранен, поскольку столбец не является детерминированным.
за исключением того факта, что моя скалярная функция QDay определяется как
FUNCTION [dbo].[QDay]
(
@Date DATETIME
)
RETURNS INT
AS
BEGIN
RETURN YEAR(@Date)*10000+MONTH(@Date)*100+DAY(@Date)
END
Который согласно Microsoft должен быть детерминированным.
Даже если изменить функцию
FUNCTION [dbo].[QDay]
(
@Date DATETIME
)
RETURNS INT
AS
BEGIN
RETURN 1
END
я все еще получаю сообщение Недетерминированной ошибки.
У меня это работает на другом сервере. Я в недоумении, что делать.
Зачем использовать скалярную функцию на всех? 'EndQDate As Year (EndDT) * 10000 + месяц (EndDT) * 100 + DAY (EndDT)'? – gvee
Возможно, 'DATETIME' не является детерминированным? Связанная вами страница указывает, что другие функции детерминированы, если они не используются с 'DATETIME', а' DATETIME' не указаны в гарантированных детерминированных функциях. – taz
Возможно, релевантно: http://stackoverflow.com/questions/3037330/why-is-date-time-offset-non-deterministic-in-sql-server-2008 – taz