Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Cara Memasukkan Hasil Prosedur Tersimpan ke Tabel Sementara di SQL Server

Dalam beberapa kasus dengan SQL Server, mungkin ada contoh di mana Anda ingin mengambil data yang dihasilkan dari prosedur tersimpan dan memasukkannya ke dalam tabel sementara untuk digunakan dalam kueri lain. Menentukan cara menyelesaikan tugas ini bisa jadi agak sulit, jadi kami akan menjelaskan secara singkat beberapa opsi, tergantung pada kebutuhan spesifik Anda dan konfigurasi database.

Sebelum kita memeriksa metode spesifik, mari buat contoh prosedur. Meskipun tidak terlalu berguna, mari buat BooksByPrimaryAuthor prosedur, yang menerima @PrimaryAuthor parameter dan mengambil catatan dari books kami tabel di mana @PrimaryAuthor pertandingan. Pernyataan pembuatan prosedur mungkin terlihat seperti ini:

CREATE PROC BooksByPrimaryAuthor
  @PrimaryAuthor nvarchar(100)
AS
BEGIN
  SELECT
    *
  FROM
    books
  WHERE
    primary_author = @PrimaryAuthor;
END
GO

Idealnya, yang ingin kita lakukan adalah seperti ini, di mana kita SELECT data yang dihasilkan dari prosedur kami dan masukkan ke dalam tabel sementara:

SELECT
  *
INTO
  #tmpSortedBooks
FROM
  EXEC BooksByPrimaryAuthor 'Tolkien'

Masalahnya adalah sintaks di atas tidak tepat dan tidak akan berfungsi . Kami membutuhkan metode baru.

Menggunakan Pernyataan OPENROWSET

Salah satu kemungkinan adalah dengan menggunakan OPENROWSET pernyataan, yang memungkinkan Anda mengakses data jarak jauh dari sumber OLE DB dan dapat dieksekusi langsung dari dalam pernyataan SQL lain. OPENROWSET adalah koneksi satu kali dan metode pengambilan data, sehingga tidak boleh digunakan untuk koneksi yang sering (dalam hal ini server penautan lebih disukai).

OPENROWSET bisa menjadi target INSERT any , DELETE , atau UPDATE pernyataan, yang membuatnya ideal untuk tujuan kami "mengeksekusi" prosedur tersimpan kami untuk kami dan mengekstrak data itu kembali ke tabel sementara kami yang menunggu.

Sebelum menggunakan OPENROWSET , mungkin perlu memodifikasi beberapa opsi konfigurasi, khususnya dengan mengizinkan akses ad hoc. Ini dapat dikonfigurasi menggunakan pernyataan berikut:

sp_configure 'Show Advanced Options', 1
GO
RECONFIGURE
GO
sp_configure 'Ad Hoc Distributed Queries', 1
GO
RECONFIGURE
GO

Sekarang kita dapat menggunakan OPENROWSET , yang memiliki sintaks tertentu yang harus dipatuhi:

OPENROWSET(
  <PROVIDER_NAME>,
  <DATA_SOURCE>,
  <OPTIONS>
)

Dengan demikian, kami dapat menjalankan prosedur tersimpan kami melalui OPENROWSET dan berikan ke tabel sementara kami seperti ini:

SELECT
  *
INTO
  #tmpSortedBooks
FROM
  OPENROWSET(
    'SQLNCLI',
    'Server=(local)\SQL2008;Trusted_Connection=yes;',
    'EXEC BooksByPrimaryAuthor Tolkien'
)

Anda mungkin perlu mengubah PROVIDER_NAME dan DATA_SOURCE nilai untuk tujuan Anda sendiri.

Menggunakan Fungsi Buatan Pengguna

Ada beberapa kelemahan pada OPENROWSET metode, yaitu memerlukan izin/konfigurasi ad hoc seperti yang kita lihat di atas, dan juga OPENROWSET hanya mampu mengembalikan satu set hasil (jika beberapa set disediakan, hanya set hasil pertama yang dikembalikan).

Oleh karena itu, metode lain untuk melakukan tugas ini adalah mengganti prosedur tersimpan secara efektif dengan fungsi yang ditentukan pengguna.

Dari contoh kita, itu akan terlihat seperti ini:

CREATE FUNCTION BooksByPrimaryAuthor
(
  @PrimaryAuthor nvarchar(100)
)
RETURNS TABLE
AS
RETURN
  SELECT
    *
  FROM
    books
  WHERE
    primary_author = @PrimaryAuthor;
GO

Fungsi ini kemudian dapat digunakan secara kasar dengan cara yang sama seperti yang diinginkan di atas menggunakan OPENROWSET :

SELECT
  *
INTO
  #tmpSortedBooks
FROM
  BooksByPrimaryAuthor('Tolkien')

Jika Anda benar-benar membutuhkan prosedur tersimpan, Anda juga dapat membungkus fungsi Anda dalam prosedur tersimpan.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pengkodean karakter default SQL Server

  2. Pemikiran tentang SQL Server 2019 Editions

  3. Ganti nama kolom SQL Server 2008

  4. Cara Menemukan Lokasi File Default untuk File Data dan File Log di SQL Server

  5. Fungsi vs Prosedur Tersimpan di SQL Server