Partager via


sp_OACreate (Transact-SQL)

Crée une instance d'un objet OLE.

Icône Lien de rubriqueConventions de la syntaxe de Transact-SQL

Syntaxe

sp_OACreate { progid | clsid } , objecttoken OUTPUT [ , context ] 

Arguments

  • progid
    Identificateur de programme (ProgID) de l'objet OLE à créer. Cette chaîne de caractères décrit la classe de l'objet OLE ; elle se présente sous la forme suivante : 'OLEComponent.Object'

    OLEComponent est le nom de composant du serveur OLE Automation ; Object est le nom de l'objet OLE. L'objet OLE spécifié doit être valide et prendre en charge l'interface IDispatch.

    Par exemple, SQLDMO.SQLServer est le ProgID de l'objet SQLServer de SQL-DMO. SQL-DMO a comme nom de composant SQLDMO, l'objet SQLServer est valide et, comme tous les objets SQL-DMO, il prend en charge IDispatch.

  • clsid
    Identificateur de classe (CLSID) de l'objet OLE à créer. Cette chaîne de caractères décrit la classe de l'objet OLE ; elle se présente sous la forme suivante : '{nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn}'. L'objet OLE spécifié doit être valide et prendre en charge l'interface IDispatch.

    Par exemple, "{00026BA1-0000-0000-C000-000000000046}" est le CLSID de l'objet SQLServer de SQL-DMO.

  • objecttokenOUTPUT
    Jeton de l'objet renvoyé ; ce doit être une variable locale de type int. Ce jeton d'objet identifie l'objet OLE créé et il est utilisé dans les appels aux autres procédures stockées de OLE Automation.

  • context
    Spécifie le contexte d'exécution dans lequel l'objet OLE nouvellement créé s'exécute. Si cet argument est spécifié, il doit avoir une des valeurs suivantes :

    1 = Uniquement serveur OLE in-process (.dll).

    4 = Uniquement serveur OLE local (.exe).

    5 = Serveurs OLE locaux et in-process autorisés

    En l'absence de spécification, la valeur par défaut est 5. Cette valeur est passée comme paramètre dwClsContext de l'appel à CoCreateInstance.

    Si un serveur OLE in-process est autorisé (à l'aide d'une valeur de contexte égale à 1 ou 5 ou en ne spécifiant aucune valeur de contexte), il a accès à la mémoire et aux autres ressources détenues par SQL Server. Un serveur OLE in-process peut endommager la mémoire ou les ressources SQL Server et provoquer des résultats imprévisibles, comme une violation d'accès SQL Server.

    Lorsque vous spécifiez une valeur de contexte égale à 4, un serveur OLE local n'a aucun accès aux ressources SQL Server et ne peut pas endommager la mémoire ou les ressources SQL Server.

    [!REMARQUE]

    Les paramètres de cette procédure stockée sont spécifiés par position, et non pas par nom.

Valeurs des codes renvoyés

0 (succès) ou un nombre différent de zéro (échec), qui représente la valeur entière de HRESULT renvoyée par l'objet OLE Automation.

Pour plus d'informations sur les codes de retour HRESULT, consultez Codes de retour OLE Automation et informations sur les erreurs.

Notes

Si des procédures OLE Automation sont activées, un appel à sp_OACreate démarre l'environnement d'exécution partagée de OLE Automation. Pour plus d'informations sur l'activation de OLE automation, consultez Option Ole Automation Procedures.

L'objet OLE créé est automatiquement détruit à la fin du traitementTransact-SQL.

Autorisations

Nécessite l'appartenance au rôle de serveur fixe sysadmin.

Exemples

A. Utilisation de ProgID

L'exemple suivant crée un objet SQLServer SQL-DMO en utilisant son ProgID.

DECLARE @object int;
DECLARE @hr int;
DECLARE @src varchar(255), @desc varchar(255);
EXEC @hr = sp_OACreate 'SQLDMO.SQLServer', @object OUT;
IF @hr <> 0
BEGIN
   EXEC sp_OAGetErrorInfo @object, @src OUT, @desc OUT 
   raiserror('Error Creating COM Component 0x%x, %s, %s',16,1, @hr, @src, @desc)
    RETURN
END;
GO

B. Utilisation de CLSID

L'exemple suivant crée un objet SQLServer SQL-DMO en utilisant son CLSID.

DECLARE @object int;
DECLARE @hr int;
DECLARE @src varchar(255), @desc varchar(255;)
EXEC @hr = sp_OACreate '{00026BA1-0000-0000-C000-000000000046}',
    @object OUT;
IF @hr <> 0
BEGIN
   EXEC sp_OAGetErrorInfo @object, @src OUT, @desc OUT 
   raiserror('Error Creating COM Component 0x%x, %s, %s',16,1, @hr, @src, @desc)
    RETURN
END;
GO