Вот таблица с вычисляемым столбцом в SQL Server 2005:
CREATE TABLE footable AS
[identifier] nvarchar(255) NOT NULL,
[result] AS CASE
WHEN [identifier] like '%\[%]' escape '\'
THEN LEFT( [identifier], CHARINDEX('[',[identifier]) - 1 )
END
Вот что я ожидаю:
identifier result
======================
foo[bar] foo
foo NULL
Это сработало несколько дней назад и работает уже более года.
Затем вчера я начал получать эту ошибку при вставке или обновлении с identifier
значениями, которые не имели [
, когда NULL был бы ожидаемым результатом:
Invalid length parameter passed to the left function.
Теперь, сегодня, он снова работает.
Почему SQL Server пытается решить функцию LEFT()
, если CASE
не соответствует действительности?
Что более важно, почему он работает один день, а не следующий?
Вчера я также создавал некоторые индексированные представления, хотя и не охватывал ни один из этих столбцов. Может ли один из параметров SET, необходимых для индексации представления, заставить базу данных начать выдавать ошибки для выражения, подобного этому?