CREATE FUNCTION dbo.FN_GET_YEAR(@ID int) RETURNS int WITH SCHEMABINDING AS
BEGIN
RETURN (SELECT YEAR(begin_date) FROM dbo.tableName WHERE id = @ID);
END
GO
CREATE TABLE test_table (
id int,
fk_id int,
test AS dbo.FN_GET_YEAR(id)
);
SELECT COLUMNPROPERTY(OBJECT_ID('test_table'), 'test', 'IsIndexable') AS IsIndexableColumn;
Выше приведен очень упрощенный фрагмент моей настоящей проблемы.У меня есть функция, которая возвращает год заданной даты, а затем эта функция используется в качестве вычисляемого столбца.Я хочу, чтобы вычисляемый столбец был индексируемым.
Однако, несмотря на то, что я попробовал все предложения онлайн, я не уверен, что мне не хватает.Я использовал ключевое слово «С SCHEMABINDING», а также пробовал с и без CONVERT / CAST.Проблема в том, что столбец не является детерминированным, но в документации также говорится, что YEAR () является детерминированным.
Если я просто верну объявленное статическое значение в функции, тогда столбец станет индексируемым.ГОД (), кажется, сломал это.
РЕДАКТИРОВАТЬ:
Я не хотел публиковать свои оригинальные запросы, чтобы сделать вещи простыми, но, возможно, я сделал это слишком простым,Я обновил запрос функции ближе к фактическому.