2017-04-27 11 views
0

에게 SQL 서버에서보기에 포함되어 있으므로 다음과 같은 쿼리가 잘 작동 : 또한내가 테이블에 전체 텍스트 인덱스를 정의 2008 R2

SELECT Field FROM MyTable WHERE CONTAINS(Field, 'text') 

의 이상 기존보기가 다음과 같이 테이블에 대해 쿼리를 실행할 수 있습니까?

인덱스로 다시 만들지 않고 뷰를 쿼리 할 수 ​​있습니까? 이 쿼리의 추상화 뷰의 목적을 패배와 일반 인덱스 중 하나가 작동하는 방식 아니므로

SELECT Field FROM MyView WHERE CONTAINS(Field, 'text') 

난, 나에게 이상한 보인다, Cannot use a CONTAINS or FREETEXT predicate on table or indexed view 'MyView' because it is not full-text indexed을 얻고있다.

답변

0

SQL Server에서 데이터베이스의 테이블 또는 인덱싱 된 뷰에 전체 텍스트 인덱스를 만듭니다. 테이블 또는 인덱싱 된 뷰마다 하나의 전체 텍스트 인덱스 만 허용되며 각 전체 텍스트 인덱스는 단일 테이블 또는 인덱싱 된 뷰에 적용됩니다.

아래 링크를 클릭하면 도움이됩니다. https://docs.microsoft.com/en-us/sql/t-sql/statements/create-fulltext-index-transact-sql

+0

요점을 놓쳤습니다. 테이블에 FTI를 만들었지 만 문제는 해당 테이블을 통해 뷰를 쿼리 할 때 적용되지 않는다는 것입니다. –

0
CREATE VIEW MyView AS SELECT * FROM MyTable 

SELECT Field FROM MyView WHERE CONTAINS(Field, 'text') 

수단 : 먼저 평가하고 기본 요청에 어떤 인덱스없이 사용됩니다

SELECT Field FROM (SELECT * FROM MyTable) WHERE CONTAINS(Field, 'text') 

... 그것은 "있는 그대로"작동하지 않을 수 있습니다 "을 MyTable SELECT * FROM".

원하는 레코드 집합을 반환하는 저장 프로 시저 (필터를 인수로 전달)를 사용해야합니다.

참고 : 뷰는 openquery 또는 openrowset 명령을 사용하여 저장 프로 시저를 호출 할 수 있습니다.

+0

예, 주된 용의자는 Microsoft의 [예제] (https://technet.microsoft.com/en-us/library/ms190237(v=sql.105) .aspx)를 기반으로 한 하위 쿼리로 해결 된보기입니다. , 나는 그냥 뷰를 인라인으로 확장한다고 말한다 :'SELECT Field FROM MyTable ... '. –