Share via


구독 규칙 SQL 필터 구문

SQL 필터는 Service Bus 토픽 구독에 사용할 수 있는 필터 유형 중 하나입니다. SQL-92 표준의 하위 집합에 의존하는 텍스트 식입니다. 필터 식은 Azure Resource Manager 템플릿에 있는 Service Bus Rule의 'sqlFilter' 속성 sqlExpression 요소 또는 Azure CLI az servicebus topic subscription rule create 명령의 --filter-sql-expression 인수 및 구독 규칙 관리를 허용하는 여러 SDK 함수에 사용됩니다. 허용되는 식은 이 섹션에 표시됩니다.

Service Bus 프리미엄은 JMS 2.0 API를 통해 JMS SQL 메시지 선택기 구문도 지원합니다.

<predicate ::=  
      { NOT <predicate> }  
      | <predicate> AND <predicate>  
      | <predicate> OR <predicate>  
      | <expression> { = | <> | != | > | >= | < | <= } <expression>  
      | <property> IS [NOT] NULL  
      | <expression> [NOT] IN ( <expression> [, ...n] )  
      | <expression> [NOT] LIKE <pattern> [ESCAPE <escape_char>]  
      | EXISTS ( <property> )  
      | ( <predicate> )  
  
<expression> ::=  
      <constant>   
      | <function>  
      | <property>  
      | <expression> { + | - | * | / | % } <expression>  
      | { + | - } <expression>  
      | ( <expression> )  
  
<property> :=   
       [<scope> .] <property_name>  
  

인수

  • <scope><property_name>의 범위를 나타내는 선택적 문자열입니다. 유효한 값은 sys 또는 user입니다.
    • sys 값은 시스템 범위를 나타냅니다. 여기서 <property_name>메시지, 페이로드 및 직렬화에 설명된 대로 Service Bus 메시지의 속성 중 하나입니다.
    • user 값은 사용자 범위를 나타냅니다. 여기서 <property_name>은 Service Bus로 보낼 때 메시지에 대해 설정할 수 있는 사용자 지정 속성의 키입니다.
    • <scope>가 지정되지 않은 경우 user 범위가 기본 범위입니다.

설명

존재하지 않는 시스템 속성에 대한 액세스 시도는 오류이지만 존재하지 않는 사용자 속성에 대한 액세스 시도는 오류가 아닙니다. 대신 존재하지 않는 사용자 속성은 알 수 없는 값으로 내부적으로 평가됩니다. 알 수 없는 값은 연산자 평가 중에 특별히 처리됩니다.

property_name

<property_name> ::=  
     <identifier>  
     | <delimited_identifier>  
  
<identifier> ::=  
     <regular_identifier> | <quoted_identifier> | <delimited_identifier>  
  

인수

<regular_identifier>는 다음 정규식으로 표현되는 문자열입니다.

[[:IsLetter:]][_[:IsLetter:][:IsDigit:]]*  

이 문법은 문자로 시작하고 뒤에 하나 이상의 밑줄/문자/숫자가 나오는 문자열입니다.

[:IsLetter:]는 유니코드 문자로 분류된 유니코드 문자를 의미합니다. System.Char.IsLetter(c)에서는 c가 유니코드 문자인 경우 true를 반환합니다.

[:IsDigit:]는 10진수 문자로 분류된 유니코드 문자를 의미합니다. System.Char.IsDigit(c)에서는 c가 유니코드 숫자인 경우 true를 반환합니다.

<regular_identifier>는 예약된 키워드일 수 없습니다.

<delimited_identifier>는 왼쪽/오른쪽 대괄호([])로 묶인 문자열입니다. 오른쪽 대괄호는 두 개의 오른쪽 대괄호로 표시됩니다. 다음은 <delimited_identifier>에 대한 예입니다.

[Property With Space]  
[HR-EmployeeID]  
  

<quoted_identifier>는 큰따옴표로 묶인 문자열입니다. 식별자에서 큰따옴표는 두 개의 큰따옴표로 표시됩니다. 문자열 상수와 혼동될 수 있으므로 따옴표가 있는 식별자를 사용하지 않는 것이 좋습니다. 가능하면 구분된 식별자를 사용하세요. <quoted_identifier>의 예제는 다음과 같습니다.

"Contoso & Northwind"  

pattern

<pattern> ::=  
      <expression>  

설명

<pattern>은 문자열로 평가할 식이어야 합니다. LIKE 연산자에 대한 패턴으로 사용됩니다. 다음 와일드 카드 문자를 포함할 수 있습니다.

  • %: 0개 이상의 문자로 이루어진 문자열

  • _: 단일 문자입니다.

escape_char

<escape_char> ::=  
      <expression>  

설명

<escape_char>은 길이가 1인 문자열로 평가할 식이어야 합니다. LIKE 연산자에 대한 이스케이프 문자로 사용됩니다.

예를 들어 property LIKE 'ABC\%' ESCAPE '\'ABC로 시작되는 문자열 대신 ABC%와 일치합니다.

constant

<constant> ::=  
      <integer_constant> | <decimal_constant> | <approximate_number_constant> | <boolean_constant> | NULL  

인수

  • <integer_constant>는 따옴표로 묶이지 않고 소수점을 포함하지 않는 숫자의 문자열입니다. 값은 내부적으로는 System.Int64로 저장되며 동일한 범위를 따릅니다.

    다음은 long 상수에 대한 예입니다.

    1894  
    2  
    
  • <decimal_constant>는 따옴표로 묶이지 않고 소수점을 포함하는 숫자의 문자열입니다. 값은 내부적으로는 System.Double로 저장되며 동일한 범위/자릿수를 따릅니다.

    이후 버전에서는 이 숫자가 정확한 숫자 의미 체계를 지원하기 위해 다른 데이터 형식으로 저장될 수 있으므로 <decimal_constant>에 대한 기본 데이터 형식이 System.Double이라는 사실이 해당되지 않습니다.

    다음은 10진수 상수에 대한 예입니다.

    1894.1204  
    2.0  
    
  • <approximate_number_constant>는 과학적 표기법으로 작성된 숫자입니다. 값은 내부적으로는 System.Double로 저장되며 동일한 범위/자릿수를 따릅니다. 다음은 대략적인 숫자 상수의 예입니다.

    101.5E5  
    0.5E-2  
    

boolean_constant

<boolean_constant> :=  
      TRUE | FALSE  

설명

Boolean 상수는 TRUE 또는 FALSE 키워드로 표시됩니다. 값은 System.Boolean으로 저장됩니다.

string_constant

<string_constant>  

설명

문자열 상수는 작은따옴표로 묶으며 유효한 유니코드 문자를 포함합니다. 문자열 상수에 포함된 작은따옴표는 두 개의 작은따옴표로 표시됩니다.

function

<function> :=  
      newid() |  
      property(name) | p(name)  

설명

newid() 함수는 System.Guid.NewGuid() 메서드에 의해 생성된 System.Guid를 반환합니다.

property(name) 함수는 name으로 참조되는 속성 값을 반환합니다. name 값은 문자열 값을 반환하는 유효한 식일 수 있습니다.

고려 사항

다음과 같은 Sql 필터 의미 체계를 고려하세요

  • 속성 이름은 대/소문자를 구분하지 않습니다.

  • 연산자는 가능하면 C# 암시적 변환 의미 체계를 따릅니다.

  • 시스템 속성은 메시지, 페이로드 및 직렬화에 설명된 대로 Service Bus 메시지의 속성 중 하나입니다.

    다음 IS [NOT] NULL 의미 체계를 고려해 보세요.

    • 속성이 존재하지 않거나 속성 값이 null인 경우 property IS NULLtrue로 평가됩니다.

속성 평가 의미 체계

  • 존재하지 않는 시스템 속성을 평가하려고 시도하면 FilterException 예외가 throw됩니다.

  • 존재하지 않는 속성은 내부적으로 알 수 없음으로 평가됩니다.

    알 수 없음 평가는 산술 연산자입니다.

  • 이진 연산자의 경우 왼쪽 또는 오른쪽 피연산자 중 하나가 알 수 없음으로 평가되는 경우 결과는 알 수 없음입니다.

  • 단항 연산자의 경우 피연산자가 알 수 없음으로 평가되는 경우 결과는 알 수 없음입니다.

    알 수 없음 평가는 이항 비교 연산자입니다.

  • 왼쪽 또는 오른쪽 피연산자 중 하나가 알 수 없음으로 평가되는 경우 결과는 알 수 없음입니다.

    [NOT] LIKE에서 알 수 없음 평가:

  • 피연산자가 알 수 없음으로 평가되는 경우 결과는 알 수 없음입니다.

    [NOT] IN에서 알 수 없음 평가:

  • 왼쪽 피연산자가 알 수 없음으로 평가되는 경우 결과는 알 수 없음입니다.

    AND 연산자에서 알 수 없음 평가:

+---+---+---+---+  
|AND| T | F | U |  
+---+---+---+---+  
| T | T | F | U |  
+---+---+---+---+  
| F | F | F | F |  
+---+---+---+---+  
| U | U | F | U |  
+---+---+---+---+  

OR 연산자에서 알 수 없음 평가:

+---+---+---+---+  
|OR | T | F | U |  
+---+---+---+---+  
| T | T | T | T |  
+---+---+---+---+  
| F | T | F | U |  
+---+---+---+---+  
| U | T | U | U |  
+---+---+---+---+  

연산자 바인딩 의미 체계

  • >, >=, <, <=, !=, =과 같은 비교 연산자는 데이터 형식 승격 및 암시적 변환에서 C# 연산자 바인딩과 동일한 의미 체계를 따릅니다.

  • +, -, *, /, %와 같은 산술 연산자는 데이터 형식 승격 및 암시적 변환에서 C# 연산자 바인딩과 동일한 의미 체계를 따릅니다.

예제

예시는 Service Bus 필터 예를 참조하세요.

다음 단계