我有一個資料庫,其中一個表中的一列一直為空白。我們的軟體中沒有任何東西可以清除該列,所以我們很困惑它是如何繼續發生的。
關于如何解決這個問題的任何建議?我正在考慮創建一個觸發器,該觸發器在每次更新此表時運行,理想情況下,當該欄位為空時。
但是我實際上可以追蹤什么樣的資訊來幫助我解決這個問題?我可以存盤更新發生時運行的 SQL 陳述句嗎?我可以存盤連接到資料庫的 Windows 行程嗎?
還有其他建議嗎?謝謝
uj5u.com熱心網友回復:
您還可以從觸發器中引發錯誤并讓您的客戶端失敗。如果您的客戶端代碼是為處理錯誤并記錄錯誤而撰寫的,您可以通過這種方式找出導致問題的原因。
uj5u.com熱心網友回復:
您可以嘗試的一件事是使用觸發器并測驗正在更新的特定列if update(column)。
然后,您可以將以下一些診斷資料捕獲到日志表中:
select @@Spid, r.plan_handle, p.program_name, p.loginame, b.event_info
from sys.dm_exec_requests r
join sys.sysprocesses p on p.spid=r.session_id
cross apply sys.dm_exec_input_buffer(r.session_id, r.request_id)b
where session_id=@@Spid
uj5u.com熱心網友回復:
如果您在某種日志記錄表中創建正確的列集,這樣的事情可能會起作用:
IF EXISTS (SELECT 1 FROM inserted WHERE LEN(ProblemColumn) = 0)
BEGIN
INSERT INTO dbo.SomeLoggingTable(cols)
SELECT getdate(), i.key, buf.*
FROM inserted AS i
CROSS APPLY sys.dm_exec_input_buffer(@@SPID, NULL)
WHERE LEN(ProblemColumn) = 0;
END
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/410153.html
標籤:
上一篇:為什么這不驗證選擇?
下一篇:如何將bat函式重定向到檔案?
