1

고객 중 한 명과 함께있는 프로젝트의 일부는 UI에 해당하는 히브리어 1037 (데이터베이스에는 영어와 히브리어가 모두 있음) Angular와 C#으로 작성된 시스템. 데이터베이스 자체는 Latin1_General_100_CI_AS와 대조됩니다. 저장 프로 시저는 단일 단어 입력을 가져 오는 것으로 가정하는 검색 매개 변수를 가져오고 SP 내부 코드는 다른 전체 텍스트 검색 쿼리에 대해 해당 매개 변수를 사용합니다.관련 데이터가 있지만 전체 텍스트 검색 저장 프로 시저가 없습니다.

첫 번째 이상한 일은 내가 따옴표와 함께 또는없이 따옴표없이 문자열을 전달할 때 모든 것이 정상적으로 작동한다는 것입니다. 나는 이것이 알려진 버그이며 Microsoft는 언제든지 그것을 고칠 의도는 없다고 읽었습니다.

실제 문제는 전달 된 실제 문자열에 있습니다.

히브리어 또는 숫자 값으로 문자열을 전달할 때 모든 것이 올바르게 작동하고 SQL Server가 관련 데이터를 가져옵니다 (UI 및 SSMS를 통해).

SSMS을 통해 영어 문자열을 전달할 때 SQL Server는 관련 데이터로 응답하지만 UI 시스템이 매개 변수를 전달하면 다시 데이터를 가져 오지 않습니다. 나는 매우 문제에 어떤 도움을 주셔서 감사합니다

ALTER PROCEDURE dbo.SearchByFreeText 
@StringToSearch NVARCHAR(500) = NULL 

AS 

SELECT * 
FROM SampleTable 
WHERE CONTAINS(SampleColumn, @StringToSearch) 
OR 
FREETEXT(SampleColumn, @StringToSearch) 

:

다음 SQL 코드는 아주 기본적인되는 사용하여 코드 메신저입니다.

감사합니다.

답변

0

시도가 diffrent 아래 이해하기 :

  1. SELECT * 자유 텍스트 (설명, "SQL의 MGT")이 비록

    문자열에 검색 표시 내용 FROM "SQL MGT "는 실제로"SQL "또는"MGT "를 검색합니다. 내용 FROM

  2. SELECT *는 WHERE

    설명 열에이 검색은 "NT는"근처 "큰"모든 행을 찾습니다 (설명, 'NT NEAR 위대한')를 포함합니다.

0

CONTAINS 또는 FREETEXT을 호출 할 때 language_term을 명시 적으로 설정해보십시오. 워드 프로세서에서 :

CONTAINS (... [ , LANGUAGE language_term ]) 

language_term을 쿼리의 일부로 단어 분리, 형태소 분석, 동의어 사전 확장 및 교체, 및 노이즈 단어 (또는 중지 단어) 제거에 사용하는 언어입니다.

language_term은 언어의 LCID에 해당하는 문자열, 정수 또는 16 진수 값으로 지정할 수 있습니다. language_term이 지정되면, 표현하는 언어는 검색 조건의 모든 요소에 적용됩니다. 값을 지정하지 않으면 열 전체 텍스트 언어가으로 사용됩니다.

FTS 언어가 일치하지 않는 것처럼 보입니다. SSMS는 SSMS에서 쿼리를 실행할 때 올바른 SSMS를 결정하는 것처럼 보입니다.

UI에서 영어 문자열을 전달할 때 SQL Server는 아마도 히브리어 색인을 확인하려고합니다. 아니 최종 솔루션으로 만하는 것은 하드 코드에 SQL 쿼리에 영어 코드 (1033)를 시도하고 UI에서 영어 검색어를 통과 볼 아무것도 발견 될 경우 :

SELECT * 
FROM SampleTable 
WHERE CONTAINS(SampleColumn, @StringToSearch, LANGUAGE 1033) 
OR 
FREETEXT(SampleColumn, @StringToSearch, LANGUAGE 1033) 

을이 결과를 찾을 경우 그때는 아마 것 즉석에서 검색어의 언어를 결정하고 동적 SQL 또는 IF (@lang = 1033) 블록을 통해 올바른 LANGUAGE 매개 변수를 사용하도록 설정해야합니다.

HTH