クエリ式と Uniform Resource Name
SQL Server 管理オブジェクト (SMO) モデルおよび SQL Server PowerShell スナップインでは、XPath 式に似た、2 種類の式文字列が使用されます。 クエリ式は、オブジェクト モデル階層内の 1 つまたは複数のオブジェクトを列挙するための条件のセットを指定する文字列です。 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
オブジェクトの種類を指定します。オブジェクトの種類は、式文字列のこのノードで表されます。 各オブジェクトは、これらの 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' に指定した文字のセットが 1 つ以上含まれるすべてのオブジェクトを列挙します。@StringPropertyName='PatternString'
指定した文字列プロパティの値が 'PatternString' に指定した文字パターンとまったく同じであるすべてのオブジェクトを列挙します。@DatePropertyName= datetime('DateString')
指定した日付プロパティの値が 'DateString' に指定した日付と一致するすべてのオブジェクトを列挙します。 DateString は、yyyy-mm-dd hh:mi:ss.mmm 形式で指定する必要があります。yyyy
年を表す 4 桁の数字。
mm
月を表す 2 桁の数字 (01 ~ 12)。
dd
日を表す 2 桁の数字 (01 ~ 31)。
hh
時を 24 時間形式で表す 2 桁の数字 (01 ~ 23)。
mi
分を表す 2 桁の数字 (01 ~ 59)。
ss
秒を表す 2 桁の数字 (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 ドキュメント内の 1 つまたは複数のタグを列挙するための条件のセットを指定する文字列です。 XPath の詳細については、W3C XPath 言語の Web サイトを参照してください。
クエリ式は、Server オブジェクトへの絶対参照で開始する必要があります。 / で始まる相対的な式は使用できません。 クエリ式に指定するオブジェクトの順序は、関連付けられたオブジェクト モデルのコレクション オブジェクトの階層に従っている必要があります。 たとえば、Microsoft.SqlServer.Management.Smo 名前空間のオブジェクトを参照するクエリ式は、Server ノードで開始し、続けて Database ノードを指定する必要があります。
オブジェクトに対して <FilterExpression> を指定しなかった場合、そのノードのすべてのオブジェクトが列挙されます。
URN (Uniform Resource Name)
URN は、クエリ式のサブセットです。 それぞれの URN は、1 つのオブジェクトへの完全修飾参照を示します。 一般的な URN では、Name プロパティを使用して、各ノードの単独のオブジェクトを識別します。 たとえば、次の URN は特定の列を参照します。
Server[@Name='MYCOMPUTER']/Database[@Name='AdventureWorks2012']/Table[@Name='SalesPerson' and @Schema='Sales']/Column[@Name='SalesPersonID']
使用例
A. false() を使用したオブジェクトの列挙
このクエリ式は、MyComputer 上の既定のインスタンスにおいて AutoClose 属性が false に設定されているすべてのデータベースを列挙します。
Server[@Name='MYCOMPUTER']/Database[@AutoClose=false()]
B. contains を使用したオブジェクトの列挙
このクエリ式は、大文字と小文字が区別されない、名前に m という文字を含むすべてのデータベースを列挙します。
Server[@Name='MYCOMPUTER']/Database[@CaseSensitive=false() and contains(@Name, 'm')]
C. not を使用したオブジェクトの列挙
このクエリ式は、Production スキーマに含まれていない、テーブル名に History という単語を含むすべての AdventureWorks2012 テーブルを列挙します。
Server[@Name='MYCOMPUTER']/Database[@Name='AdventureWorks2012']/Table[not(@Schema='Production') and contains(@Name, 'History')]
D. 最後のノードのフィルター式を省略した例
このクエリ式は、AdventureWorks2012.Sales.SalesPerson テーブルのすべての列を列挙します。
Server[@Name='MYCOMPUTER']/Database[@Name='AdventureWorks2012"]/Table[@Schema='Sales' and @Name='SalesPerson']/Columns
E. datetime を使用したオブジェクトの列挙
このクエリ式は、特定の時刻に AdventureWorks2012 データベースに作成されたすべてのテーブルを列挙します。
Server[@Name='MYCOMPUTER']/Database[@Name='AdventureWorks2012"]/Table[@CreateDate=datetime('2008-03-21 19:49:32.647')]
F. is_null を使用したオブジェクトの列挙
このクエリ式は、最終更新日プロパティの値が NULL ではない AdventureWorks2012 データベース内のすべてのテーブルを列挙します。
Server[@Name='MYCOMPUTER']/Database[@Name='AdventureWorks2012"]/Table[Not(is_null(@DateLastModified))]