sp_OAMethod (Transact-SQL)

適用於:SQL Server

呼叫 OLE 物件的 方法。

Transact-SQL 語法慣例

語法

sp_OAMethod objecttoken , methodname
    [ , returnvalue OUTPUT ]
    [ , [ @parametername = ] parameter [ OUTPUT ] [ ...n ] ]
[ ; ]

引數

重要

擴充預存程式的自變數必須依特定順序輸入,如 語法 一節所述。 如果參數依序輸入,就會發生錯誤訊息。

objecttoken

先前使用 sp_OACreate所建立之 OLE 物件的物件標記。

methodname

要呼叫之 OLE 物件的方法名稱。

returnvalue 輸出

OLE 物件的 方法傳回值。 如果指定,它必須是適當數據類型的局部變數。

如果方法傳回單一值,則為:

  • 指定 returnvalue 的局部變數,這會傳回局部變數中的方法傳回值;或
  • 請勿指定 returnvalue,它會將方法傳回值以單一數據行單一數據列結果集的形式傳回給用戶端。

如果方法傳回值是 OLE 物件, returnvalue 必須是數據類型 int 的局部變數。物件令牌會儲存在局部變數中,而且此物件令牌可以與其他 OLE Automation 預存程式搭配使用。

當方法傳回值是陣列時,如果 指定 returnvalue ,則會設定為 NULL。

發生下列任一項時,就會引發錯誤:

  • 會指定 returnvalue ,但方法不會傳回值。
  • 方法會傳回具有兩個以上維度的陣列。
  • 方法會以輸出參數的形式傳回數位。

[ @parametername = ] 參數 [ OUTPUT ]

方法參數。 如果指定, 參數 必須是適當數據類型的值。

若要取得輸出參數的傳回值, 參數 必須是適當數據類型的局部變數,而且 OUTPUT 必須指定。 如果指定常數參數,或 OUTPUT 未指定,則會忽略輸出參數的任何傳回值。

如果指定, parametername 必須是 Microsoft Visual Basic 具名參數的名稱。 @parametername不是 Transact-SQL 局部變數。 拿掉 at sign (@) ,並將 parametername 傳遞至 OLE 物件做為參數名稱。 所有具名參數都必須在指定所有位置參數之後指定。

n

表示可以指定多個參數的佔位元。

注意

@parametername可以是具名參數,因為它是指定方法的一部分,而且會傳遞至物件。 這個預存程式的其他參數是由位置指定,而不是名稱。

傳回碼值

0 (success) 或非零數位 (failure),這是 OLE Automation 物件所傳回之 HRESULT 的整數值。

如需 HRESULT 傳回碼、 OLE 自動化傳回碼和錯誤資訊的詳細資訊。

結果集

如果方法傳回值是具有一或兩個維度的陣列,則會以結果集的形式傳回數位給用戶端:

  • 一維陣列會以單一資料列結果集的方式傳回給用戶端,這個資料列中有多個資料行,資料行數目等於陣列的元素數目。 換句話說,陣列會以 (columns) 的形式傳回。

  • 二維陣列會以多資料列結果集的方式傳回給用戶端,這個資料列中有多個資料行,資料行數目等於陣列的元素數目。資料行數目等於陣列第一維的元素數目,資料列數目等於陣列第二維的元素數目。 換句話說,陣列會傳回為 (資料行、數據列)。

當屬性傳回值或方法傳回值為陣列時,sp_OAGetProperty 或 sp_OAMethod 會將結果集傳給用戶端。 (方法輸出參數不能是陣列。這些程式會掃描數位中的所有資料值,以判斷用於結果集中每個數據行的適當 SQL Server 數據類型和數據長度。 對於特定資料行,這些程序會利用資料類型和長度來表示這個資料行中的所有資料值。

當資料行中的所有資料值都共用相同的資料類型時,整個資料行都會使用這個資料類型。 當數據行中的數據值屬於不同的數據類型時,會根據下列圖表選擇整個數據行的數據類型。

整數 (int) FLOAT 錢 Datetime 瓦查爾 NVARCHAR
int int 浮動 錢 varchar varchar nvarchar
浮動 浮動 浮動 錢 varchar varchar nvarchar
錢 錢 錢 錢 varchar varchar nvarchar
datetime varchar varchar varchar datetime varchar nvarchar
varchar varchar varchar varchar varchar varchar nvarchar
nvarchar nvarchar nvarchar nvarchar nvarchar nvarchar nvarchar

備註

您也可以使用 sp_OAMethod 來取得屬性值。

權限

需要系統管理員固定伺服器角色的成員資格,或直接在此預存程式上執行許可權。 必須啟用 [Ole Automation Procedures] 伺服器組態選項,才能使用任何與 OLE Automation 相關的系統程式。

範例

A。 呼叫方法

下列範例會呼叫 Connect 先前建立 之 SQLServer 物件的 方法。 以強密碼取代 <password> 。

EXECUTE
    @hr = sp_OAMethod
    @object,
    'Connect',
    NULL,
    'my_server',
    'my_login',
    '<password>';

IF @hr <> 0
BEGIN
    EXECUTE sp_OAGetErrorInfo @object;
    RETURN;
END

B. 取得屬性

下列範例會取得 HostName 屬性(先前建立 SQLServer 的物件),並將其儲存在局部變數中。

DECLARE @property AS VARCHAR (255);

EXECUTE
    @hr = sp_OAMethod
    @object, 'HostName',
    @property OUTPUT;

IF @hr <> 0
BEGIN
    EXECUTE sp_OAGetErrorInfo @object;
    RETURN;
END

PRINT @property;