2012-10-26 2 views
2

많은 영숫자가 아닌 문자를 포함 할 수있는 열 부품 #이 있습니다. 고객이나 공급 업체의 부품 번호를 데이터와 자주 비교해야합니다. 나는 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

더 나은 질문은 왜이 사용자 정의 함수가 비 결정적입니까? – user1777129

답변

0

아, 방금 대답을 찾았습니다. 내 함수는 스키마 바운드되어야합니다.