2

我有一个列部分 # 可以包含许多非字母数字字符。我经常需要将来自客户或供应商的零件编号与我们的数据进行比较。我已经使用仅返回字母数字的用户定义函数成功地做到了这一点。我通过在索引视图上创建一个名为 stripPartNum 的计算列来提高性能。我想将此计算列移动到表中。

我无法将计算列创建为持久化,因此我可以在该列上创建索引。
错误:无法保留表“inventory”中的计算列“stripPartNum”,因为该列是不确定的。

我创建了一个不使用 patIndex 的新用户定义函数,但仍然有同样的问题。这是功能:

Create FUNCTION [dbo].[anOnly]
(
@string VARCHAR(900)
)
RETURNS VARCHAR(900)

AS
BEGIN

Declare @pos int,@newString varchar(1000),@charAt char(1)
Set @pos = 0
Set @newString = ''

while @pos <= len(@string)
    begin
    Set @charAt = substring(@string,@pos,1)
    if @charAt not like '[^0-9A-Za-z]'
        Set @newString = @newString + @charAt
    Set @pos = @pos + 1
    end

return @newString
END

为什么我可以在视图中的计算列上创建索引,但不能在表上创建索引?有没有我忽略的解决方案?

4

1 回答 1

0

Ah, I just found the answer. My function must be schema bound.

于 2012-10-26T14:02:50.577 回答