쿼리 식 및 URN
SMO(SQL Server Management Object) 모델 및 SQL Server PowerShell 스냅인은 XPath 식과 유사한 두 가지 유형의 식 문자열을 사용합니다. 쿼리 식은 개체 모델 계층 구조에 있는 하나 이상의 개체를 열거하는 데 사용되는 조건 집합을 지정하는 문자열입니다. URN(Uniform Resource Name)은 단일 개체를 고유하게 식별하는 특정 유형의 쿼리 식 문자열입니다.
구문
Object1[<FilterExpression1>]/ ... /ObjectN[<FilterExpressionN>]
<FilterExpression>::=
<PropertyExpression> [and <PropertyExpression>][...n]
<PropertyExpression>::=
@BooleanPropertyName=true()
| @BooleanPropertyName=false()
| contains(@StringPropertyName, 'PatternString')
| @StringPropertyName='String'
| @DatePropertyName=datetime('DateString')
| is_null(@PropertyName)
| not(<PropertyExpression>)
인수
Object
식 문자열의 Object 노드에서 나타내는 개체 유형을 지정합니다. 각 개체는 이러한 SMO 개체 모델 네임스페이스의 컬렉션 클래스를 나타냅니다.Microsoft.SqlServer.Management.Smo
Microsoft.SqlServer.Management.Smo.Agent
Microsoft.SqlServer.Management.Smo.Broker
Microsoft.SqlServer.Management.Smo.Mail
Microsoft.SqlServer.Management.Dmf
Microsoft.SqlServer.Management.Facets
Microsoft.SqlServer.Management.RegisteredServers
Microsoft.SqlServer.Management.Smo.RegSvrEnum
예를 들어 ServerCollection 클래스에 대해 Server를 지정하고, DatabaseCollection 클래스에 대해 Database를 지정합니다.
@PropertyName
Object에 지정된 개체와 관련된 클래스의 속성 중 하나의 이름을 지정합니다. 속성 이름은 @ 문자로 시작해야 합니다. 예를 들어 Database 클래스 속성인 IsAnsiNull에 대해 @IsAnsiNull을 지정합니다.@BooleanPropertyName=true()
지정된 부울 속성이 TRUE로 설정된 개체를 모두 열거합니다.@BooleanPropertyName=false()
지정된 부울 속성이 FALSE로 설정된 개체를 모두 열거합니다.contains(@StringPropertyName, 'PatternString')
지정된 문자열 속성에 'PatternString'에 지정된 문자열 집합이 적어도 하나 이상 포함되어 있는 개체를 모두 열거합니다.@StringPropertyName='PatternString'
지정된 문자열 속성 값이 'PatternString'에 지정된 문자 패턴과 정확하게 같은 개체를 모두 열거합니다.@DatePropertyName= datetime('DateString')
지정된 날짜 속성 값이 'DateString'에 지정된 날짜와 일치하는 개체를 모두 열거합니다. DateString은 yyyy-mm-dd hh:mi:ss.mmm 형식을 따라야 합니다.yyyy
4자리 연도
mm
두 자리 월(01 - 12)
dd
두 자리 날짜(01 - 31)
hh
24시간제를 사용하는 두 자리 시간(01 - 23)
mi
두 자리 분(01 - 59)
ss
두 자리 초(01 - 59)
mmm
밀리초 수(001 - 999)
이 형식으로 지정된 날짜를 SQL Server에 저장된 모든 날짜 형식에 대해 평가할 수 있습니다.
is_null(@PropertyName)
지정된 속성 값이 NULL인 개체를 모두 열거합니다.not(<PropertyExpression>)
PropertyExpression의 평가 값을 부정하고 PropertyExpression에 지정된 조건과 일치하지 않는 개체를 모두 열거합니다. 예를 들어 not(contains(@Name, 'xyz'))는 이름에 xyz 문자열이 없는 개체를 모두 열거합니다.
주의
쿼리 식은 SMO 모델 계층 구조에 있는 노드를 열거하는 문자열입니다. 각 노드에는 해당 노드에서 열거되는 개체를 결정하는 조건을 지정하는 필터 식이 있습니다. 쿼리 식은 XPath 식 언어에서 모델링됩니다. 쿼리 식은 XPath에서 지원하는 작은 식 집합을 구현하고 XPath에 없는 일부 확장도 포함합니다. XPath 식은 XML 문서에서 하나 이상의 태그를 열거하는 데 사용되는 조건 집합을 지정하는 문자열입니다. XPath에 대한 자세한 내용은 W3C XPath Language를 참조하십시오.
쿼리 식은 Server 개체에 대한 절대 참조로 시작해야 합니다. /로 시작하는 상대 식은 사용할 수 없습니다. 쿼리 식에 지정된 개체 시퀀스는 관련 개체 모델에 있는 컬렉션 개체의 계층 구조를 따라야 합니다. 예를 들어 Microsoft.SqlServer.Management.Smo 네임스페이스의 개체를 참조하는 쿼리 식은 Server 노드로 시작하고 그 다음에 Database 노드 등이 와야 합니다.
개체에 대해 <FilterExpression>이 지정되지 않은 경우 해당 노드의 개체가 모두 열거됩니다.
URN(Uniform Resource Name)
URN은 쿼리 식의 하위 집합입니다. 각 URN은 단일 개체에 대한 정규화된 참조를 형성합니다. 일반적인 URN에서는 Name 속성을 사용하여 각 노드의 단일 개체를 식별합니다. 예를 들어 이 URN은 특정 열을 참조합니다.
Server[@Name='MYCOMPUTER']/Database[@Name='AdventureWorks2012']/Table[@Name='SalesPerson' and @Schema='Sales']/Column[@Name='SalesPersonID']
예
1.false()를 사용하여 개체 열거
이 쿼리 식은 MyComputer의 기본 인스턴스에서 AutoClose 특성이 false로 설정된 데이터베이스를 모두 열거합니다.
Server[@Name='MYCOMPUTER']/Database[@AutoClose=false()]
2.contains를 사용하여 개체 열거
이 쿼리 식은 대/소문자를 구분하지 않고 이름에 'm' 문자가 있는 데이터베이스를 모두 열거합니다.
Server[@Name='MYCOMPUTER']/Database[@CaseSensitive=false() and contains(@Name, 'm')]
3.not을 사용하여 개체 열거
이 쿼리 식은 Production 스키마에 없으며 테이블 이름에 History라는 단어를 포함하는 AdventureWorks2012 테이블을 모두 열거합니다.
Server[@Name='MYCOMPUTER']/Database[@Name='AdventureWorks2012']/Table[not(@Schema='Production') and contains(@Name, 'History')]
4.최종 노드에 대한 필터 식 제공 안 함
이 쿼리 식은 AdventureWorks2012.Sales.SalesPerson 테이블의 열을 모두 열거합니다.
Server[@Name='MYCOMPUTER']/Database[@Name='AdventureWorks2012"]/Table[@Schema='Sales' and @Name='SalesPerson']/Columns
5.datetime을 사용하여 개체 열거
이 쿼리 식은 특정 시간에 AdventureWorks2012 데이터베이스에서 만든 테이블을 모두 열거합니다.
Server[@Name='MYCOMPUTER']/Database[@Name='AdventureWorks2012"]/Table[@CreateDate=datetime('2008-03-21 19:49:32.647')]
6.is_null을 사용하여 개체 열거
이 쿼리 식은 마지막 수정 날짜 속성에 대한 NULL이 없는 AdventureWorks2012 데이터베이스의 테이블을 모두 열거합니다.
Server[@Name='MYCOMPUTER']/Database[@Name='AdventureWorks2012"]/Table[Not(is_null(@DateLastModified))]