我有一个列部分#,可以包含许多非字母数字字符。我经常需要将客户或供应商的部分#与我们的数据进行比较。我一直在使用用户定义的函数成功完成此操作,该函数仅返回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
为什么我能够在视图中的计算列上创建索引而不在表上创建索引?我有一个解决方案吗?
答案 0 :(得分:0)