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

ああ、私はちょうど答えを見つけました。私の関数はスキーマにバインドされている必要があります。

于 2012-10-26T14:02:50.577 に答える