计算列或索引视图?

时间:2012-10-26 13:16:21

标签: sql-server-2005

我有一个列部分#,可以包含许多非字母数字字符。我经常需要将客户或供应商的部分#与我们的数据进行比较。我一直在使用用户定义的函数成功完成此操作,该函数仅返回alpha-Numeric。我通过在索引视图上创建名为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

为什么我能够在视图中的计算列上创建索引而不在表上创建索引?我有一个解决方案吗?

1 个答案:

答案 0 :(得分:0)

啊,我刚刚找到了答案。我的函数必须是模式绑定的。