オブジェクト階層構文 (Transac-SQL)
sp_OAGetProperty および sp_OASetProperty の propertyname パラメーターと、sp_OAMethod の methodname パラメーターでは、Microsoft Visual Basic のオブジェクト階層構文と類似のオブジェクト階層構文がサポートされます。 この特殊な構文を使用する場合、パラメーターの一般的な形式は次のようになります。
構文
'TraversedObject.PropertyOrMethod'
引数
TraversedObject
ストアド プロシージャで指定される objecttoken 以下の階層に含まれる OLE オブジェクトを指定します。 一連のコレクション、オブジェクト プロパティ、およびオブジェクトを返すメソッドを指定するには、Visual Basic 構文を使用します。 一連のオブジェクト指定子内で、各オブジェクトはピリオド (.) で区切る必要があります。一連の指定子の項目には、コレクション名を指定できます。 コレクションを指定するには、次の構文を使用します。
Collection("item")
二重引用符 (") が必要です。 コレクションに Visual Basic 感嘆符 (!) 構文を使用することはできません。
PropertyOrMethod
TraversedObject のプロパティ名またはメソッド名を指定します。sp_OAGetProperty、sp_OASetProperty、または sp_OAMethod パラメーター (sp_OAMethod 出力パラメーターのサポートを含む) を使用して、すべてのインデックスまたはメソッド パラメーターを指定するには、次の構文を使用します。
PropertyOrMethod
すべてのインデックスまたはメソッド パラメーターをかっこで囲んで指定するには、次の構文を使用します。この場合、sp_OAGetProperty、sp_OASetProperty、または sp_OAMethod のすべてのインデックスまたはメソッド パラメーターは無視されます。
PropertyOrMethod ( [ ParameterName := ] "parameter" [ , ... ] )
二重引用符 (") が必要です。 すべての名前付きパラメーターは、位置で指定するパラメーターをすべて指定した後で指定する必要があります。
説明
TraversedObject を指定しない場合は、PropertyOrMethod が必要です。
PropertyOrMethod を指定しない場合、TraversedObject は OLE オートメーション ストアド プロシージャからのオブジェクト トークン出力パラメーターとして返されます。 PropertyOrMethod を指定した場合は、TraversedObject のプロパティまたはメソッドが呼び出され、プロパティまたはメソッドの戻り値は、OLE オートメーション ストアド プロシージャからの出力パラメーターとして返されます。
TraversedObject 一覧内のどの項目でも OLE オブジェクトが返されない場合は、エラーが発生します。
Visual Basic OLE オブジェクト構文の詳細については、Visual Basic のマニュアルを参照してください。
HRESULT のリターン コードの詳細については、「sp_OACreate (Transact-SQL)」を参照してください。
使用例
次は、SQL-DMO SQLServer オブジェクトを使用するオブジェクト階層構文の例です。
-- Get the AdventureWorks2012 Person.Address Table object.
EXEC @hr = sp_OAGetProperty @object,
'Databases("AdventureWorks2012").Tables("Person.Address")',
@table OUT
-- Get the Rows property of the AdventureWorks2012 Person.Address table.
EXEC @hr = sp_OAGetProperty @object,
'Databases("AdventureWorks2012").Tables("Person.Address").Rows',
@rows OUT
-- Call the CheckTable method to validate the
-- AdventureWorks2012 Person.Address table.
EXEC @hr = sp_OAMethod @object,
'Databases("AdventureWorks2012").Tables("Person.Address").CheckTable',
@checkoutput OUT