英数字以外の文字を多く含むことができる列部分 # があります。顧客やベンダーから提供された部品番号を当社のデータと頻繁に比較する必要があります。英数字のみを返すユーザー定義関数を使用して、これを成功させてきました。インデックス付きビューに 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
ビューの計算列にはインデックスを作成できるのに、テーブルには作成できないのはなぜですか? 私が見落としている解決策はありますか?