Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Tự động truy xuất tên tham số và giá trị hiện tại bên trong thủ tục lưu trữ T-SQL

Tôi đang tìm kiếm một đoạn mã chuẩn mà tôi có thể đưa vào quy trình có thể lặp qua tất cả các tham số cho proc và truy xuất các giá trị hiện tại được chuyển vào--

Bạn có thể lấy tất cả các giá trị được chuyển vào cho một sp bằng cách sử dụng truy vấn dưới đây

Ví dụ:
Tôi có proc được lưu trữ dưới đây cung cấp cho tôi chi tiết bán hàng (chỉ dành cho bản demo)

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

Mình đã gọi sp của mình như bên dưới ..

exec  dbo.getsales 4

Bây giờ nếu tôi muốn nhận giá trị được truyền, tôi có thể sử dụng truy vấn bên dưới

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'

cho tôi thấy bên dưới là giá trị thời gian biên dịch

như đã nói, có nhiều điều cần xem xét..chúng ta có thể sử dụng các phương thức xml để nhận giá trị này

bây giờ điều gì sẽ xảy ra, nếu tôi chạy lại cùng một chương trình đã lưu trữ với giá trị là 2 ..

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

Một điểm quan trọng ở đây, là các giá trị trên được hiển thị khi tôi chọn kế hoạch thực thi để hiển thị từ các thăm dò.

Nhưng giá trị trong bộ nhớ cache sẽ là gì, hãy xem nó bằng cách sử dụng lại truy vấn bộ nhớ cache kế hoạch ở trên một lần nữa

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

Nó vẫn hiển thị giá trị đã biên dịch, cộng với cột usecounts là 5 - `` nghĩa là kế hoạch này đã được sử dụng 5 lần và tham số đã được truyền khi kế hoạch được biên dịch ban đầu là 4. đồng thời cũng có nghĩa là, các giá trị thời gian chạy không được lưu trữ trong bộ nhớ đệm chi tiết kế hoạch ..

Vì vậy, tóm lại, bạn có thể nhận các giá trị thời gian chạy được chuyển tới proc được lưu trữ

  • 1. Các giá trị được chuyển trong khi câu lệnh được biên dịch (
    Bạn có thể bắt đầu thu thập thông tin này theo thời gian và ghi lại chúng dựa trên chương trình đã lưu trữ, tôi nghĩ rằng theo thời gian khi máy chủ khởi động lại, hãy lập kế hoạch biên dịch lại, bạn có thể nhận được bộ mới giá trị tham số)
  • 2. Liên hệ với nhóm DEV cũng là một cách tốt, vì họ có thể cung cấp cho bạn danh sách tổng số các tham số có thể được thông qua, nếu thisexcercise là cubersome


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tôi có thể kết nối với Máy chủ SQL bên ngoài mạng của tôi không?

  2. Triển khai Cơ sở dữ liệu đầu tiên của Entity Framework Code

  3. Sự khác biệt giữa chỉ mục được phân nhóm và không phân nhóm

  4. SQL Server Management Studio - mẹo để cải thiện quy trình mã hóa TSQL

  5. Khi nào thì tốt hơn nên lưu trữ cờ dưới dạng bitmask thay vì sử dụng bảng kết hợp?