Partager via


sp_OACreate (Transact-SQL)

S'applique à :SQL Server

Crée une instance d'un objet OLE.

Conventions de la syntaxe Transact-SQL

Syntaxe

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

Arguments

Important

Les arguments des procédures stockées étendues doivent être entrés dans l’ordre spécifique, comme décrit dans la section syntaxe. Si les paramètres sont entrés hors ordre, un message d’erreur se produit.

progid

Identificateur programmatique (ProgID) de l’objet OLE à créer. Cette chaîne de caractères décrit la classe de l’objet OLE et a la forme suivante : <OLEComponent>.<Object>.

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

Par exemple, SQLDMO.SQLServer est le ProgID de l’objet SQL-DMO SQLServer . SQL-DMO a un nom de composant SQLDMO, l’objet SQLServer est valide et (comme tous les objets SQL-DMO) l’objet SQLServer 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 et a la forme suivante : {<nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn>}. L’objet OLE spécifié doit être valide et doit prendre en charge l’interface IDispatch .

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

objecttoken OUTPUT

Le jeton d’objet retourné et doit être une variable locale de type de données int. Ce jeton d’objet identifie l’objet OLE créé et est utilisé dans les appels aux autres procédures stockées OLE Automation.

contexte

Spécifie le contexte d'exécution dans lequel l'objet OLE nouvellement créé s'exécute. Si elle est spécifiée, cette valeur doit être l’une des options suivantes :

  • 1 = Serveur OLE in-process.dll () uniquement
  • 4 = Serveur OLE local.exe uniquement
  • 5 = Serveur OLE local et in-process autorisé

Si elle n’est pas spécifiée, la valeur par défaut est 5. Cette valeur est passée en tant que paramètre dwClsContext de l’appel à CoCreateInstance.

Si un serveur OLE in-process est autorisé (à l’aide d’une valeur de contexte ou 15 en ne spécifiant pas une valeur de contexte), il a accès à la mémoire et à d’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, tels qu’une violation d’accès SQL Server.

Lorsque vous spécifiez une valeur 4de contexte , un serveur OLE local n’a pas accès à des 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 de retour

0 (réussite) ou nombre différent de zéro (échec) qui est la valeur entière du HRESULT retourné par l’objet OLE Automation.

Pour plus d’informations sur les codes de retour HRESULT, consultez les codes de retour OLE Automation et les informations d’erreur.

Notes

Si les procédures OLE Automation sont activées, un appel pour sp_OACreate démarrer l’environnement d’exécution partagée OLE Automation. Pour plus d’informations sur l’activation d’OLE Automation, consultez Ole Automation Procedures (option de configuration de serveur).

L’objet OLE créé est automatiquement détruit à la fin du lot d’instructions Transact-SQL.

autorisations

Nécessite l’appartenance au rôle serveur fixe sysadmin ou l’autorisation d’exécution directement sur cette procédure stockée. L’option de configuration du serveur Procédures Ole Automation doit être activée pour utiliser n’importe quelle procédure système liée à OLE Automation.

Exemples

R. Utiliser ProgID

L’exemple suivant crée un objet SQL-DMO SQLServer à l’aide de son ProgID.

DECLARE @object AS INT;
DECLARE @hr AS INT;
DECLARE @src AS VARCHAR (255);
DECLARE @desc AS VARCHAR (255);

EXECUTE
    @hr = sp_OACreate 'SQLDMO.SQLServer',
    @object OUTPUT;

IF @hr <> 0
BEGIN
    EXECUTE sp_OAGetErrorInfo
        @object,
        @src OUTPUT,
        @desc OUTPUT;
    RAISERROR ('Error Creating COM Component 0x%x, %s, %s', 16, 1, @hr, @src, @desc);
    RETURN;
END
GO

B. Utiliser CLSID

L’exemple suivant crée un objet SQL-DMO SQLServer à l’aide de son CLSID.

DECLARE @object AS INT;
DECLARE @hr AS INT;
DECLARE @src AS VARCHAR (255);
DECLARE @desc AS VARCHAR (255);

EXECUTE
    @hr = sp_OACreate '{00026BA1-0000-0000-C000-000000000046}',
    @object OUTPUT;

IF @hr <> 0
BEGIN
    EXECUTE sp_OAGetErrorInfo
        @object,
        @src OUTPUT,
        @desc OUTPUT;
    RAISERROR ('Error Creating COM Component 0x%x, %s, %s', 16, 1, @hr, @src, @desc);
    RETURN;
END
GO