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

Ambil Nama Parameter &Nilai Saat Ini Secara Dinamis Di Dalam Prosedur Tersimpan T-SQL

Saya mencari potongan kode standar yang dapat saya tempelkan ke dalam prosedur yang dapat mengulang semua parameter untuk proc dan mengambil nilai saat ini yang diteruskan--

Anda bisa mendapatkan semua nilai yang diteruskan untuk sp menggunakan kueri di bawah ini

Contoh :
Saya memiliki proc tersimpan di bawah ini yang memberi saya detail penjualan (hanya untuk demo)

alter  proc dbo.getsales
(
@salesid int
)
as
begin
select 
* from sales where [email protected]
end

Saya telah memanggil sp saya seperti di bawah ini..

exec  dbo.getsales 4

Sekarang jika saya ingin mendapatkan nilai yang diteruskan, saya dapat menggunakan kueri di bawah ini

select top 10* from sys.dm_exec_cached_plans cp
cross apply
sys.dm_exec_text_query_plan(cp.plan_handle,default,default)
where objtype='proc'

yang menunjukkan kepada saya di bawah ini sebagai nilai waktu kompilasi

dengan itu, ada banyak hal yang perlu dipertimbangkan..kita dapat menggunakan metode xml untuk mendapatkan nilai ini

sekarang apa yang terjadi, jika saya menjalankan proc tersimpan yang sama lagi untuk nilai 2 ..

<ColumnReference Column="@salesid" ParameterCompiledValue="(4)" ParameterRuntimeValue="(2)" />

Satu tangkapan penting di sini, adalah nilai di atas ditampilkan ketika saya memilih rencana eksekusi untuk ditampilkan dari ssms.

Tapi apa yang akan menjadi nilai dalam cache, mari kita lihat menggunakan kueri cache rencana di atas lagi

<ColumnReference Column="@salesid" ParameterCompiledValue="(4)"/>

Itu masih menunjukkan nilai yang dikompilasi, ditambah kolom usecounts sebagai 5--`yang berarti rencana ini telah digunakan 5 kali dan parameter yang dilewati ketika rencana itu awalnya dikompilasi adalah 4.yang juga berarti, nilai waktu berjalan tidak disimpan dalam cache detail rencana..

Jadi secara ringkas, Anda bisa mendapatkan nilai runtime yang diteruskan ke proc tersimpan

  • 1.Nilai yang diteruskan saat pernyataan dikompilasi(
    Anda dapat mulai mengumpulkan info ini selama periode waktu tertentu dan mencatatnya ke proc yang tersimpan, saya pikir seiring waktu dengan server reboot, rencana kompilasi ulang Anda bisa mendapatkan set baru dari nilai parameter)
  • 2.Menghubungi tim DEV juga merupakan cara yang baik, karena mereka dapat memberi Anda daftar total parameter yang dapat dilewati, jika latihan ini berat


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. sql server membagi nilai yang dipisahkan koma menjadi kolom

  2. Cara Mengubah Nomor Urutan Akun Email Database dalam Profil di SQL Server (T-SQL)

  3. RODBC sqlSimpan masalah pembuatan tabel

  4. SQL Server:Bagaimana saya bisa mengelompokkan beberapa nilai baris ke dalam kolom terpisah?

  5. DATEFROMPARTS() Contoh di SQL Server (T-SQL)