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

Trình kích hoạt có thể tìm thấy tên của thủ tục được lưu trữ đã sửa đổi dữ liệu không?

bạn có thể thử:CONTEXT_INFO

đây là một ví dụ sử dụng CONTEXT_INFO:

trong mọi quy trình thực hiện chèn / xóa / cập nhật mà bạn muốn theo dõi, hãy thêm phần này:

DECLARE @string        varchar(128)
       ,@CONTEXT_INFO  varbinary(128)
SET @string=ISNULL(OBJECT_NAME(@@PROCID),'none')
SET @CONTEXT_INFO =cast('Procedure='[email protected]+REPLICATE(' ',128) as varbinary(128))
SET CONTEXT_INFO @CONTEXT_INFO

--do insert/delete/update that will fire the trigger

SET CONTEXT_INFO 0x0 --clears out the CONTEXT_INFO value

đây là phần của trình kích hoạt để truy xuất giá trị:

DECLARE @string         varchar(128)
       ,@sCONTEXT_INFO  varchar(128)
SELECT @sCONTEXT_INFO=CAST(CONTEXT_INFO() AS VARCHAR) FROM master.dbo.SYSPROCESSES WHERE [email protected]@SPID

IF LEFT(@sCONTEXT_INFO,9)='Procedure'
BEGIN
    SET @string=RIGHT(RTRIM(@sCONTEXT_INFO),LEN(RTRIM(@sCONTEXT_INFO))-10)
END
ELSE
BEGIN --optional failure code
    RAISERROR('string was not specified',16,1)
    ROLLBACK TRAN
    RETURN
END

..use the @string


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách thay thế ký tự thứ n trong máy chủ sql

  2. Tính tổng số ngày làm việc của doanh nghiệp giữa hai ngày

  3. Ràng buộc khóa ngoại SQL DROP TABLE

  4. Truy vấn sql để tạo ngày thanh toán hàng tháng trong một phạm vi ngày

  5. Thiết kế cơ sở dữ liệu:một bảng lớn hay các bảng riêng biệt?