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 menentukanlocalhost
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.