クエリ式と Uniform Resource Name

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

SQL Server 管理オブジェクト (SMO) モデルおよび SQL Server PowerShell スナップインでは、XPath 式に似た、2 種類の式文字列が使用されます。 クエリ式は、オブジェクト モデル階層内の 1 つまたは複数のオブジェクトを列挙するための条件のセットを指定する文字列です。 URN (Uniform Resource Name) は、単一のオブジェクトを一意に識別する特定の種類のクエリ式文字列です。

Note

SQL Server PowerShell モジュールには SqlServerSQLPS の 2 つがあります。

SqlServer モジュールは、使用する現在の PowerShell モジュールです。

SQLPS モジュールは、(後方互換性のため) SQL Server のインストールに含まれていますが、今後更新されることはありません。

SqlServer モジュールには、SQLPS のコマンドレットの更新バージョンに加え、最新の SQL 機能をサポートする新しいコマンドレットが含まれています。

PowerShell ギャラリーから SqlServer モジュールをインストールします。

詳細については、「SQL Server PowerShell」を参照してください。

構文

  
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 クラスを、データベースでは DatabaseCollection クラスを指定します。

@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 形式で指定する必要があります。

DateString コンポーネント 説明
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='AdventureWorks2022']/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 を使用したオブジェクトの列挙

このクエリ式は、 AdventureWorks2022 Production スキーマに含まれていない、テーブル名に History という単語を含むすべての テーブルを列挙します。

Server[@Name='MYCOMPUTER']/Database[@Name='AdventureWorks2022']/Table[not(@Schema='Production') and contains(@Name, 'History')]  

D. 最後のノードのフィルター式を省略した例

このクエリ式は、 AdventureWorks2022.Sales.SalesPerson テーブル内のすべての列を列挙します。

Server[@Name='MYCOMPUTER']/Database[@Name='AdventureWorks2022"]/Table[@Schema='Sales' and @Name='SalesPerson']/Columns  

E. datetime を使用したオブジェクトの列挙

このクエリ式は、特定の時刻に AdventureWorks2022 データベースに作成されたすべてのテーブルを列挙します。

Server[@Name='MYCOMPUTER']/Database[@Name='AdventureWorks2022"]/Table[@CreateDate=datetime('2008-03-21 19:49:32.647')]  

F. is_null を使用したオブジェクトの列挙

このクエリ式は、最終更新日プロパティの値が NULL ではない AdventureWorks2022 データベース内のすべてのテーブルを列挙します。

Server[@Name='MYCOMPUTER']/Database[@Name='AdventureWorks2022"]/Table[Not(is_null(@DateLastModified))]  

参照