Delen via


sp_OAMethod (Transact-SQL)

van toepassing op:SQL Server-

Roept een methode van een OLE-object aan.

Transact-SQL syntaxisconventies

Syntaxis

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

Argumenten

Belangrijk

Argumenten voor uitgebreide opgeslagen procedures moeten worden ingevoerd in de specifieke volgorde, zoals beschreven in de sectie Syntaxis. Als de parameters niet in de volgorde zijn ingevoerd, treedt er een foutbericht op.

objecttoken

Het objecttoken van een OLE-object dat eerder is gemaakt met behulp van sp_OACreate.

methodenaam

De methodenaam van het OLE-object dat moet worden aangeroepen.

returnvalue UITVOER

De retourwaarde van de methode van het OLE-object. Indien opgegeven, moet het een lokale variabele van het juiste gegevenstype zijn.

Als de methode één waarde retourneert, kunt u het volgende doen:

  • geef een lokale variabele op voor retourwaarde, die de retourwaarde van de methode in de lokale variabele retourneert; of
  • geef geen returnvalue op, waarmee de methode retourwaarde naar de client wordt geretourneerd als een resultatenset met één kolom en één rij.

Als de retourwaarde van de methode een OLE-object is, moet returnvalue een lokale variabele van het gegevenstype intzijn. Een objecttoken wordt opgeslagen in de lokale variabele en dit objecttoken kan worden gebruikt met andere opgeslagen OLE Automation-procedures.

Wanneer de retourwaarde van de methode een matrix is en returnvalue is opgegeven, wordt deze ingesteld op NULL.

Er treedt een fout op wanneer een van de volgende situaties optreedt:

  • retourwaarde is opgegeven, maar de methode retourneert geen waarde.
  • De methode retourneert een matrix met meer dan twee dimensies.
  • De methode retourneert een matrix als uitvoerparameter.

Parameter [ @parametername = ] [ OUTPUT ]

Een methodeparameter. Indien opgegeven, moet parameter een waarde van het juiste gegevenstype zijn.

Als u de retourwaarde van een uitvoerparameter wilt verkrijgen, moet parameter een lokale variabele van het juiste gegevenstype zijn en moet OUTPUT worden opgegeven. Als een constante parameter is opgegeven of als OUTPUT niet is opgegeven, wordt een retourwaarde van een uitvoerparameter genegeerd.

Indien opgegeven, moet parameternaam de naam zijn van de microsoft Visual Basic-benoemde parameter. @parametername is geen Transact-SQL lokale variabele. Het at-teken (@) wordt verwijderd en parameternaam wordt doorgegeven aan het OLE-object als parameternaam. Alle benoemde parameters moeten worden opgegeven nadat alle positionele parameters zijn opgegeven.

n

Een tijdelijke aanduiding die aangeeft dat er meerdere parameters kunnen worden opgegeven.

Notitie

@parametername kan een benoemde parameter zijn omdat deze deel uitmaakt van de opgegeven methode en wordt doorgegeven aan het object. De andere parameters voor deze opgeslagen procedure worden opgegeven op positie, niet op naam.

Codewaarden retourneren

0 (geslaagd) of een niet-nulnummer (fout) dat de gehele waarde is van het HRESULT dat wordt geretourneerd door het OLE Automation-object.

Voor meer informatie over HRESULT-retourcodes OLE Automation-retourcodes en foutinformatie.

Resultatenset

Als de retourwaarde van de methode een matrix met een of twee dimensies is, wordt de matrix als resultaatset naar de client geretourneerd:

  • Een eendimensionale matrix wordt aan de client geretourneerd als een resultatenset met één rij met zoveel kolommen als er elementen in de matrix zijn. Met andere woorden, de matrix wordt geretourneerd als (kolommen).

  • Een tweedimensionale matrix wordt als resultaatset geretourneerd naar de client met zoveel kolommen als er elementen in de eerste dimensie van de matrix zijn en met zoveel rijen als er elementen in de tweede dimensie van de matrix zijn. Met andere woorden, de matrix wordt geretourneerd als (kolommen, rijen).

Wanneer een eigenschap retourwaarde of methode-retourwaarde een matrix is, retourneert sp_OAGetProperty of sp_OAMethod een resultatenset op de client. (Parameters voor methodeuitvoer kunnen geen matrices zijn.) Met deze procedures worden alle gegevenswaarden in de matrix gescand om de juiste SQL Server-gegevenstypen en gegevenslengten te bepalen die voor elke kolom in de resultatenset moeten worden gebruikt. Voor een bepaalde kolom gebruiken deze procedures het gegevenstype en de lengte die nodig is om alle gegevenswaarden in die kolom weer te geven.

Wanneer alle gegevenswaarden in een kolom hetzelfde gegevenstype delen, wordt dat gegevenstype gebruikt voor de hele kolom. Wanneer gegevenswaarden in een kolom van verschillende gegevenstypen zijn, wordt het gegevenstype van de hele kolom gekozen op basis van de volgende grafiek.

Int drijven geld datum/tijd varchar nvarchar
float- geld varchar- varchar- nvarchar-
float- float- float- geld varchar- varchar- nvarchar-
geld geld geld geld varchar- varchar- nvarchar-
datum/tijd- varchar- varchar- varchar- datum/tijd- varchar- nvarchar-
varchar- varchar- varchar- varchar- varchar- varchar- nvarchar-
nvarchar- nvarchar- nvarchar- nvarchar- nvarchar- nvarchar- nvarchar-

Opmerkingen

U kunt ook sp_OAMethod gebruiken om een eigenschapswaarde op te halen.

Machtigingen

Vereist lidmaatschap van de sysadmin vaste serverfunctie of voer de machtiging rechtstreeks uit voor deze opgeslagen procedure. De Ole Automation-procedures serverconfiguratieoptie moet zijn ingeschakeld voor het gebruik van een systeemprocedure met betrekking tot OLE Automation.

Voorbeelden

Een. Een methode aanroepen

In het volgende voorbeeld wordt de Connect methode aangeroepen van de eerder gemaakte SQLServer--object. Vervang <password> door een sterk wachtwoord.

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

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

B. Een eigenschap ophalen

In het volgende voorbeeld wordt de eigenschap HostName (van het eerder gemaakte SQLServer-object) opgehaald en opgeslagen in een lokale variabele.

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;