Saya memiliki prosedur tersimpan yang mengembalikan baris:
CREATE PROCEDURE MyProc
AS
BEGIN
SELECT * FROM MyTable
END
Prosedur saya yang sebenarnya sedikit lebih rumit, itulah mengapa sproc diperlukan.
Apakah mungkin untuk memilih output dengan memanggil prosedur ini?
Sesuatu seperti:
SELECT * FROM (EXEC MyProc) AS TEMP
Saya perlu menggunakan SELECT TOP X
,, ROW_NUMBER
dan WHERE
klausa tambahan untuk halaman data saya, dan saya tidak benar-benar ingin meneruskan nilai-nilai ini sebagai parameter.
sql
sql-server
sql-server-2005
stored-procedures
jonathanpeppers
sumber
sumber
Jawaban:
Anda dapat menggunakan fungsi yang ditentukan pengguna atau tampilan alih-alih prosedur.
Prosedur dapat mengembalikan beberapa set hasil, masing-masing dengan skema sendiri. Itu tidak cocok untuk digunakan dalam
SELECT
pernyataan.sumber
Kamu bisa
... sql ....
sumber
INSERT #T
atauINSERT @T
apakahINSERT EXEC
pernyataan tidak dapat disarangkan. Jika prosedur tersimpan sudah adaINSERT EXEC
di dalamnya, ini tidak akan berhasil.Anda menginginkan fungsi Table-Valued atau memasukkan EXEC Anda ke tabel sementara:
sumber
INSERT #T
atauINSERT @T
apakahINSERT EXEC
pernyataan tidak dapat disarangkan. Jika prosedur tersimpan sudah adaINSERT EXEC
di dalamnya, ini tidak akan berhasil.Anda harus membaca tentang OPENROWSET dan OPENQUERY
sumber
Anda perlu mendeklarasikan tipe tabel yang berisi jumlah kolom yang sama dengan prosedur toko Anda. Tipe data kolom dalam tipe tabel dan kolom yang dikembalikan oleh prosedur harus sama
Maka Anda perlu memasukkan hasil prosedur tersimpan Anda dalam jenis tabel Anda yang baru saja Anda tentukan
Pada akhirnya cukup pilih dari jenis tabel Anda
sumber
Tidak perlu menggunakan tabel sementara.
Ini solusi saya
sumber
sp_serveroption 'MYSERVER', 'DATA ACCESS', TRUE;
Anda dapat menyalin output dari tabel sp ke temporaty.
sumber
gunakan OPENQUERY dan sebelum Jalankan set 'SET FMTONLY OFF; SET NOCOUNT AKTIF; '
Coba kode contoh ini:
sumber
Cobalah mengonversi prosedur Anda menjadi Fungsi Inline yang mengembalikan tabel sebagai berikut:
Dan kemudian Anda bisa menyebutnya sebagai
Anda juga memiliki opsi untuk meneruskan parameter ke fungsi sebagai berikut:
Dan sebut saja
sumber
Jika 'DATA ACCESS' salah,
setelah,
berhasil.
sumber
Anda bisa sedikit curang dengan OPENROWSET:
Ini masih akan menjalankan seluruh SP setiap waktu, tentu saja.
sumber
Demi kesederhanaan dan membuatnya dapat dijalankan kembali, saya telah menggunakan sistem StoredProcedure "sp_readerrorlog" untuk mendapatkan data:
sumber
Sepertinya Anda hanya perlu menggunakan tampilan . Tampilan memungkinkan kueri untuk direpresentasikan sebagai tabel sehingga, tampilan, dapat dipertanyakan.
sumber
Jika server Anda disebut SERVERX misalnya, ini adalah bagaimana saya melakukannya ...
Untuk memeriksa ini berhasil, saya mengomentari
EXEC()
baris perintah dan menggantinya denganSELECT @CMD
untuk meninjau perintah sebelum mencoba menjalankannya! Itu untuk memastikan semua jumlah tanda kutip tunggal yang benar ada di tempat yang tepat. :-)Saya harap itu membantu seseorang.
sumber