我有一个列部分 # 可以包含许多非字母数字字符。我经常需要将来自客户或供应商的零件编号与我们的数据进行比较。我已经使用仅返回字母数字的用户定义函数成功地做到了这一点。我通过在索引视图上创建一个名为 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
为什么我可以在视图中的计算列上创建索引,但不能在表上创建索引?有没有我忽略的解决方案?