Banyak kali saya perlu menulis sesuatu seperti berikut ketika berhadapan dengan SQL Server.
create table #table_name
(
column1 int,
column2 varchar(200)
...
)
insert into #table_name
execute some_stored_procedure;
Tetapi membuat tabel yang memiliki sintaks yang tepat karena hasil dari prosedur tersimpan adalah tugas yang membosankan. Sebagai contoh, hasil sp_helppublication memiliki 48 kolom! Saya ingin tahu apakah ada cara mudah untuk melakukan ini.
Terima kasih.
sql-server
t-sql
stored-procedures
Hanya seorang pembelajar
sumber
sumber
Jawaban:
Jika prosedur hanya mengembalikan satu set hasil dan opsi permintaan yang didistribusikan ad hoc diaktifkan.
Atau Anda dapat mengatur server yang ditautkan loopback dan menggunakannya.
sumber
SET FMT_ONLY ON
?Di SQL Server 2012 dan di atas, Anda dapat menggunakan
sys.dm_exec_describe_first_result_set
secara lokal, dengan asumsi hasil yang Anda cari adalah hasil pertama :Hasil:
Perhatikan ada batasan: jika prosedur tersimpan Anda membuat tabel #temp, fungsi metadata tidak berfungsi. Inilah sebabnya saya tidak menggunakan sp_who2. :-)
sumber
SELECT @sql += *expression*
sintaksinya didokumentasikan di suatu tempat? haruskahORDER BY
dimasukkan untuk membuatnya stabil?ORDER BY
sebenarnya diketahui membuat ini kurang stabil . Jika Anda menginginkan hasil dalam urutan yang dapat diprediksi, gunakanFOR XML PATH
atau, jika pada versi SQL Server yang cukup baruSTRING_AGG
,.+=
string ... string+=
didokumentasikan di sini . Tapi terima kasih!Tidak. Hasil dari prosedur yang disimpan dapat sangat bervariasi: itu tidak dirancang untuk selalu mengembalikan tepat satu hasil yang ditetapkan seperti SELECT pada beberapa objek.
Anda harus menjalankan CREATE TABLE
sumber
Saya akan menulis prosedur untuk menghasilkan tabel untuk saya:
Kemudian sebut dengan:
Catatan : Ganti 'YOUR_PROCEDURE_NAME_HERE' dengan nama prosedur tersimpan Anda sendiri.
Catatan : Ganti YOUR_TABLE_NAME_HERE dengan nama tabel pilihan Anda.
Di atas akan menghasilkan sesuatu seperti ini:
sumber