Bagikan melalui


sp_OACreate (T-SQL)

Berlaku untuk:SQL Server

Membuat instans objek OLE.

Konvensi sintaks transact-SQL

Sintaks

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

Argumen

Penting

Argumen untuk prosedur tersimpan yang diperluas harus dimasukkan dalam urutan tertentu seperti yang dijelaskan di bagian Sintaks. Jika parameter dimasukkan di luar urutan, pesan kesalahan terjadi.

progid

Pengidentifikasi terprogram (ProgID) dari objek OLE yang akan dibuat. String karakter ini menjelaskan kelas objek OLE dan memiliki formulir: <OLEComponent>.<Object>.

OLEComponent adalah nama komponen server OLE Automation, dan Object adalah nama objek OLE. Objek OLE yang ditentukan harus valid dan harus mendukung IDispatch antarmuka.

Misalnya, SQLDMO.SQLServer adalah ProgID dari objek SQL-DMO SQLServer . SQL-DMO memiliki nama komponen SQLDMO, SQLServer objek valid, dan (seperti semua objek SQL-DMO) SQLServer objek mendukung IDispatch.

clsid

Pengidentifikasi kelas (CLSID) dari objek OLE yang akan dibuat. String karakter ini menjelaskan kelas objek OLE dan memiliki formulir: {<nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn>}. Objek OLE yang ditentukan harus valid dan harus mendukung IDispatch antarmuka.

Misalnya, {00026BA1-0000-0000-C000-000000000046} adalah CLSID dari objek SQL-DMO SQLServer .

OUTPUT objecttoken

Token objek yang dikembalikan, dan harus merupakan variabel lokal dari int tipe data. Token objek ini mengidentifikasi objek OLE yang dibuat dan digunakan dalam panggilan ke prosedur tersimpan OLE Automation lainnya.

context

Menentukan konteks eksekusi tempat objek OLE yang baru dibuat berjalan. Jika ditentukan, nilai ini harus menjadi salah satu opsi berikut:

  • 1 = Hanya server OLE dalam proses (.dll)
  • 4 = Server OLE lokal (.exe) saja
  • 5 = Server OLE dalam proses dan lokal diizinkan

Jika tidak ditentukan, nilai defaultnya adalah 5. Nilai ini diteruskan sebagai parameter dwClsContext dari panggilan ke CoCreateInstance.

Jika server OLE dalam proses diizinkan (dengan menggunakan nilai 1 konteks atau 5 atau dengan tidak menentukan nilai konteks), server tersebut memiliki akses ke memori dan sumber daya lain yang dimiliki oleh SQL Server. Server OLE dalam proses mungkin merusak memori atau sumber daya SQL Server dan menyebabkan hasil yang tidak dapat diprediksi, seperti pelanggaran akses SQL Server.

Saat Anda menentukan nilai 4konteks , server OLE lokal tidak memiliki akses ke sumber daya SQL Server apa pun, dan tidak dapat merusak memori atau sumber daya SQL Server.

Catatan

Parameter untuk prosedur tersimpan ini ditentukan berdasarkan posisi, bukan berdasarkan nama.

Mengembalikan nilai kode

0 (berhasil) atau angka bukan nol (kegagalan) yang merupakan nilai bilangan bulat HRESULT yang dikembalikan oleh objek OLE Automation.

Untuk informasi selengkapnya tentang kode pengembalian HRESULT, lihat kode pengembalian otomatisasi OLE dan informasi kesalahan.

Keterangan

Jika prosedur otomatisasi OLE diaktifkan, panggilan untuk sp_OACreate memulai lingkungan eksekusi bersama OLE Automation. Untuk informasi selengkapnya tentang mengaktifkan otomatisasi OLE, lihat Prosedur Otomatisasi Ole (opsi konfigurasi server).

Objek OLE yang dibuat secara otomatis dihancurkan di akhir batch pernyataan Transact-SQL.

Izin

Memerlukan keanggotaan dalam peran server tetap sysadmin atau menjalankan izin langsung pada prosedur tersimpan ini. Opsi konfigurasi server Prosedur Ole Automation harus diaktifkan untuk menggunakan prosedur sistem apa pun yang terkait dengan OLE Automation.

Contoh

J. Gunakan ProgID

Contoh berikut membuat objek SQL-DMO SQLServer dengan menggunakan ProgID-nya.

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. Gunakan CLSID

Contoh berikut membuat objek SQL-DMO SQLServer dengan menggunakan CLSID-nya.

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