Невозможно создать столбец Computed с помощью функции RIGHT, поскольку CHARINDEX возвращает ноль - PullRequest
2 голосов
/ 07 мая 2019

Итак, у меня есть таблица документа, в которую я хочу добавить вычисляемый столбец с именем «FileType», используя столбец «FileName». Ниже приведен код, который я использовал для добавления вычисляемого столбца: -

ALTER TABLE dbo.Document Add FileType AS UPPER(RIGHT(FileName,CHARINDEX('.',REVERSE(FileName))-1))

Оказывается, некоторые данные в столбце FileName не имеют '.' в имени, что является причиной проблемы. Я хочу как-то реализовать проверку для возврата CharIndex только тех данных, состоящих из '.' в их FileName. Но я не могу написать оператор Select в операторе Alter.

ПРИМЕЧАНИЕ: - Я пытался найти решение по следующим ссылкам, которые помогли мне найти проблему, но я не смог найти какое-либо решение из них.

Ошибка: неверный параметр длины передан правильной функции в сценарии анализа имени

Недопустимый параметр длины, переданный в функцию RIGHT

Недопустимый параметр длины, переданный в функцию RIGHT в операторе обновления

Ответы [ 2 ]

3 голосов
/ 07 мая 2019

Используйте оператор case, чтобы сделать его условным, например,

UPPER(RIGHT(FileName, case when CHARINDEX('.',REVERSE(FileName)) > 0 then CHARINDEX('.',REVERSE(FileName))-1 else len(Filename) end))
2 голосов
/ 07 мая 2019

Самый простой способ - добавить разделитель:

UPPER(RIGHT(FileName, CHARINDEX('.', REVERSE(FileName) + '.') - 1))

Условная логика не требуется.

...