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

Cara Memilih Subset Kolom dari Set Hasil Prosedur Tersimpan (T-SQL)

Pernahkah Anda menjalankan prosedur tersimpan, hanya untuk kewalahan pada jumlah kolom yang dikembalikan? Mungkin Anda hanya membutuhkan satu atau dua kolom, tetapi itu memberi Anda cara terlalu banyak kolom untuk kebutuhan Anda pada kesempatan khusus ini.

Untungnya, ada sedikit trik yang dapat Anda gunakan untuk mengambil kolom yang dipilih dari prosedur tersimpan. Ini memungkinkan Anda untuk mendapatkan hanya kolom yang Anda butuhkan.

Dan bagian terbaiknya adalah, tidak perlu membuat tabel sementara dan mengacak data.

Yang perlu Anda lakukan adalah meneruskan prosedur tersimpan Anda ke OPENROWSET() fungsi.

Konsep yang sama dapat diterapkan pada OPENQUERY() fungsi.

Contoh

Ambil sp_columns prosedur tersimpan sistem misalnya. Ini mengembalikan 19 kolom.

EXEC sp_columns Cats; 

Hasil:

+-------------------+---------------+---------- ----+---------------+-------------+--------------+ -------------+----------+--------+---------+----- -------+-----------+-------------+--------------- ---+--------------------+---------------------+---- ----------------+---------------+----------------+ | TABLE_QUALIFIER | TABLE_OWNER | TABEL_NAME | COLUMN_NAME | DATA_TYPE | TYPE_NAME | PRESISI | PANJANG | SKALA | RADIX | NULLABLE | KETERANGAN | COLUMN_DEF | SQL_DATA_TYPE | SQL_DATETIME_SUB | CHAR_OCTET_LENGTH | ORDINAL_POSITION | IS_NULLABLE | SS_DATA_TYPE ||-------------------+---------------+----------- ---+---------------+-------------+--------------+- ------------+----------+--------+---------+------ ------+-----------+-------------+---------------- -+--------------------+---------------------+----- ---------------+---------------+----------------|| Hewan peliharaan | dbo | Kucing | CatId | 4 | int identitas | 10 | 4 | 0 | 10 | 0 | NULL | NULL | 4 | NULL | NULL | 1 | TIDAK | 56 || Hewan peliharaan | dbo | Kucing | Nama Kucing | 12 | varchar | 60 | 60 | NULL | NULL | 1 | NULL | NULL | 12 | NULL | 60 | 2 | YA | 39 |+-------------------+---------------+----------- ---+---------------+-------------+--------------+- ------------+----------+--------+---------+------ ------+-----------+-------------+---------------- -+--------------------+---------------------+----- ---------------+---------------+----------------+ 

Prosedur seperti ini sering mengharuskan kita untuk menggulir ke samping dalam pengejaran angsa liar untuk menemukan kolom yang kita minati.

Mungkin kita hanya ingin melihat 4 kolom tertentu daripada semua 19.

Kita dapat menjalankan kueri berikut untuk melakukan hal itu.

SELECT 
    c.COLUMN_NAME,
    c.TYPE_NAME,
    c.PRECISION,
    c.LENGTH
FROM OPENROWSET(
    'SQLOLEDB', 
    'SERVER=localhost;Trusted_Connection=yes;', 
    'EXEC Pets.dbo.sp_columns Cats'
    ) c; 

Hasil:

+---------------+--------------+-------------+- ---------+| COLUMN_NAME | TYPE_NAME | PRESISI | PANJANG ||---------------+--------------+-------------+-- --------|| CatId | int identitas | 10 | 4 || Nama Kucing | varchar | 60 | 60 |+---------------+--------------+-------------+-- --------+

OPENROWSET() fungsi dirancang terutama untuk mengambil data jarak jauh, tetapi Anda juga dapat menggunakannya pada instance lokal, dengan menentukan localhost di string koneksi (seperti yang saya lakukan dalam contoh ini).

Fungsi OPENQUERY()

Seperti disebutkan, konsep yang sama dapat diterapkan ke OPENQUERY() fungsi.

SELECT 
    c.COLUMN_NAME,
    c.TYPE_NAME,
    c.PRECISION,
    c.LENGTH
FROM OPENQUERY(
    Homer,
    'EXEC Pets.dbo.sp_columns Cats'
    ) c; 

Hasil:

+---------------+--------------+-------------+- ---------+| COLUMN_NAME | TYPE_NAME | PRESISI | PANJANG ||---------------+--------------+-------------+-- --------|| CatId | int identitas | 10 | 4 || Nama Kucing | varchar | 60 | 60 |+---------------+--------------+-------------+-- --------+

Dalam hal ini, saya menetapkan server tertaut yang disebut Homer bukannya server lokal.

Jika Anda mendapatkan kesalahan yang mengatakan "Server tidak dikonfigurasi untuk AKSES DATA", Anda harus mengaktifkan akses data untuk server, bahkan jika Anda menanyakan instans lokal Anda. Lihat Cara Mengaktifkan/Menonaktifkan Akses Data untuk petunjuk tentang cara melakukannya.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Belajar Menyimpan dan Menganalisis Dokumen di Sistem File Windows dengan Pencarian Semantik SQL Server – Bagian 1

  2. Bagaimana Transaksi Implisit Bekerja di SQL Server

  3. Solusi Untuk Cara Membaca File Log Transaksi SQL Server Tanpa Gagal

  4. Alih-alih pemicu di SQL Server kehilangan SCOPE_IDENTITY?

  5. Cara Membuat Database di SQL Server