2014-09-05 2 views
0

내부적으로 CHARINDEX()를 사용하는 T-SQL의 사용자 정의 함수가 있습니다. @caseSensitivity (bit) 매개 변수를 입력으로 받아들이므로 CHARINDEX() 함수의 대소 문자 (데이터 정렬)를 결정해야합니다. CHARINDEX()의 모든 경우에 대해 두 개의 if-constructs를 만들지 않고 그렇게 할 수있는 방법이 있습니까?사용자 정의 함수의 CaseSensitivity T-SQL

+1

코드 샘플을 게시 할 수 있습니까? – Jace

+0

'IF' 대신'CASE'를 고려 했습니까? 당신의 논리에 달려 있습니다. – Tak

+0

@t_m, 대소 문자를 사용하면 코드의 양과 품질이 같아 지므로 잘 사용하지 않아도됩니다. – zhulien

답변

1

불행히도, 거기에 isn't a way to set a connection-level collation override, 그게 당신이 생각했다면 (나는).

그러나이 방법을 쉽게 제어 할 수있는 방법을 찾고 있다면 모든 CHARINDEX 조회를 대소 문자를 구분하여 평가 한 다음 UPPER을 사용하여 @ caseSensitive는 0입니다.

DECLARE @caseSensitivity BIT = 1 
DECLARE @input VARCHAR(3) = 'Abc' 
DECLARE @inputCheck VARCHAR(3) = 'B' 

IF @caseSensitivity = 0 
BEGIN 
    SET @input = UPPER(@input) 
    SET @inputCheck = UPPER(@input) 
END 

SELECT CHARINDEX(@inputCheck COLLATE SQL_Latin1_General_CP1_CS_AS, @input COLLATE SQL_Latin1_General_CP1_CS_AS, 0) 
+0

이것은 실제로 문제에 대한 훌륭한 해결책입니다. 나는 그런 것을 찾고있었습니다. 고맙습니다! – zhulien

+0

대단히 환영합니다! –

관련 문제