Richiamare oggetti COM in query T-SQL

Home | SQL Server

Grazie ad alcune stored procedure proprietarie di SQL Server Ŕ possibile creare oggetti COM direttamente da query T-SQL. E' evidente che l'utilitÓ di questa caratteristica di SQL Server Ŕ limitata ad alcune circostanze particolari.

Pu˛ essere utile quando alcune informazioni inserite all'interno del database devono scatenare processi esterni al database, immaginiamo la generazione di un documento per una fattura, oppure l'invio di una mail o la creazione di un file a partire dal testo contenuto in una campo di una tabella, ecc...

Le stored procedure in questione sono:

sp_OACreate

Crea un'istanza dell'oggetto OLE sul server dove risiede SQL Server. Ecco l'esempio riportato nel manuale ufficiale di SQL Server

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 
   SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
    RETURN
END

Come si pu˛ vedere questa stored procdure ha come primo parametro il nome dell'oggetto (oppure il suo class ID), come secondo parametro il riferimento al nuovo oggetto creato che deve essere di tipo int. Il risultato di questa stored procedure Ŕ un intero che rappresenta il tipo di errore restituito, se 0 allora vuol dire che l'oggetto Ŕ stato creato correttamente.

sp_OAGetProperty

Per ottenere il valore di una proprietÓ dell'oggetto.

DECLARE @property varchar(255)
EXEC @hr = sp_OAGetProperty @object, 'HostName', @property OUT
IF @hr <> 0
BEGIN
   EXEC sp_OAGetErrorInfo @object
    RETURN
END
PRINT @property

In questo caso viene stampata lla proprietÓ HostName di un oggetto precedentemente creato. Il parametro @object Ŕ il token generato dalla store procedure sp_OACreate, quello successivo Ŕ il nome della proprietÓ dell'oggetto ed il terzo Ŕ la variabile destinata ad accogliere il valore della proprietÓ.

sp_OASetProperty

Inversamente assegna un valore ad una proprietÓ di un oggetto, quindi avrÓ come parametri l'oggetto, poi il nome della proprietÓ e quindi il valore che questa proprietÓ deve assumere.

EXEC @hr = sp_OASetProperty @object, 'HostName', 'Gizmo'
IF @hr <> 0
BEGIN
   EXEC sp_OAGetErrorInfo @object
    RETURN
END

sp_OAMethod

Invoca un metodo dell'oggetto in questione, ha come parametri il nome dell'oggetto il nome del metodo e poi tutti i parametri del metodo.

		
EXEC @hr = sp_OAMethod @object, 'Connect', NULL, 'my_server',
    'my_login', 'my_password'
IF @hr <> 0
BEGIN
   EXEC sp_OAGetErrorInfo @object
    RETURN
END

sp_OADestroy

Questa stored procedure distrugge l'oggetto nella memoria del server. Deve essere richiamato a fine esecuzione per evitare di lasciare spazio di memoria allocato

EXEC @hr = sp_OADestroy @object
IF @hr <> 0
BEGIN
   EXEC sp_OAGetErrorInfo @object
    RETURN
END

sp_OAGetErrorInfo

Ottiene informazioni sull'errore generato dalla precedente stored procedure lanciata in riferimento all'oggetto inserito come parametro.

Home