Share via


구독 규칙 SQL 작업 구문

SQL 작업은 구독 규칙의 필터로 메시지를 선택한 후 메시지 메타데이터를 조작하는 데 사용됩니다. SQL-92 표준의 하위 집합에 의존하는 텍스트 식입니다. 작업 식은 Azure Resource Manager 템플릿에 있는 Service Bus Rule의 'action' 속성 sqlExpression 요소 또는 Azure CLI az servicebus topic subscription rule create 명령의 --action-sql-expression 인수 및 구독 규칙 관리를 허용하는 여러 SDK 함수에 사용됩니다.

<statements> ::=
    <statement> [, ...n]  
  
<statement> ::=
    <action> [;]
    Remarks
    -------
    Semicolon is optional.  
  
<action> ::=
    SET <property> = <expression>
    REMOVE <property>  
<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> ::=  
      <expression>  

설명

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

  • %: 0개 이상의 문자로 이루어진 문자열
  • _: 단일 문자입니다.

escape_char

<escape_char> ::=  
      <expression>  

설명

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

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

상수

<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> :=  
      newid() |  
      property(name) | p(name)  

현재 newid()property(name)는 지원되는 유일한 함수입니다.

설명

  • newid() 함수는 System.Guid.NewGuid() 메서드에 의해 생성된 System.Guid를 반환합니다.
  • property(name) 함수는 name으로 참조되는 속성 값을 반환합니다. name 값은 문자열 값을 반환하는 유효한 식일 수 있습니다.

예제

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

고려 사항

  • SET은 새 속성을 만들고 기존 속성의 값을 업데이트하는 데 사용됩니다.
  • REMOVE는 사용자 속성을 제거하는 데 사용됩니다. 사용자 속성만 제거할 수 있으며 시스템 속성은 제거할 수 없습니다.
  • SET은 식 형식과 기존 속성 형식이 다른 경우 암시적 변환을 수행합니다(가능한 경우).
  • 존재하지 않는 시스템 속성이 참조되면 작업이 실패합니다.
  • 존재하지 않는 사용자 속성이 참조된 경우 작업이 실패하지 않습니다.
  • 존재하지 않는 사용자 속성은 연산자를 평가할 때 SQLRuleFilter와 동일한 의미 체계에 따라 내부적으로 "알 수 없음"으로 평가됩니다.

중요 사항

다음은 몇 가지 중요한 사항입니다.

  • 메시지의 속성만 수정할 수 있습니다.
  • 모든 사용자 속성을 수정할 수 있습니다.
  • 공개적으로 업데이트할 수 있는 모든 시스템 속성(예: ReplyToCorreationId)을 수정할 수도 있지만 규칙 작업의 일부로 시스템 속성을 변경하지 않는 것이 좋습니다. 이전 버전과의 호환성 때문에 여전히 허용됩니다.
  • 속성을 설정할 때 숫자, 부울 및 문자열 리터럴만 허용됩니다. 문자열 리터럴은 수정되는 속성에 따라 형식으로 변환됩니다. 설정되는 속성이 아직 존재하지 않는 경우 문자열에서 형식 변환이 없습니다. 수정 중인 속성이 이미 존재하고 해당 값이 Guid, DateTimeOffset, TimeSpan, Uri, DateTime 형식 중 하나인 경우 문자열 리터럴이 해당 형식으로 변환되고 속성 값으로 설정됩니다. 좀 더 구체적으로 말하자면, 작업은 문자열 리터럴을 속성 형식으로 변환하려고 시도합니다. 성공하면 속성이 설정됩니다. 그렇지 않으면 규칙 작업 평가에서 예외를 throw하고 메시지가 배달 못 한 편지로 처리됩니다.

다음 단계