SQL Server:计算表达式错误

时间:2010-10-21 20:34:00

标签: sql-server-2005 tsql calculated-columns

这是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.

现在,今天它再次运作。

LEFT()不正确时,为什么SQL Server会尝试解析CASE函数?

更重要的是,为什么它有一天工作而不是下一天?

我昨天也创建了一些索引视图,但没有涵盖这些列中的任何一个。索引视图所需的SET选项之一是否会导致数据库开始为这样的表达式抛出错误?

1 个答案:

答案 0 :(得分:0)

我会用

N'[^[]%\[%]' escape N'\'  

那应该处理第一个字符是[。

的可能性

或者,如果你想在这种情况下返回一个非null(空字符串?),使用嵌套的CASE来处理CHARINDEX返回1的条件。

顺便说一下,你真的不需要那个转义字符或转义子句。您可以使用[[]匹配[character:

N'[^[]%[[]%]'

但是,这是个人品味的问题。我可以看到转义版本是如何更清晰