2
我想記錄SQL查詢(特別是INSERT,UPDATE和DELETE),將這些數據庫更改導入到另一臺服務器上的同一個數據庫。 我使用PHP和SQLSRV如下執行我的查詢:如何使用sqlsrv打印出php中的當前sql查詢?
$query = "UPDATE table SET column = 0 WHERE id = (?)";
$params = array($myid);
sqlsrv_query($conn, $query, $params);
現在我想保存完整的SQL查詢(包括PARAMS)到日誌表。我希望我可以用觸發器做到這一點,並嘗試類似以下內容:
SELECT dest.text
FROM sys.dm_exec_requests dem CROSS APPLY sys.dm_exec_sql_text(dem.sql_handle) dest
WHERE session_id = @@SPID
但是,這總是會自行返回。 以下似乎更好:
DECLARE @sql nvarchar(max)
SET @sql = 'DBCC INPUTBUFFER(' + CAST(@@SPID AS nvarchar(100)) + ')'
CREATE TABLE #SQL (
EventType varchar(100),
Parameters int,
EventInfo nvarchar(max)
)
INSERT INTO #SQL
EXEC sp_executesql @sql
SELECT @sql = EventInfo FROM #SQL
DROP TABLE #SQL
之後,@sql包含有類似
(@P1 int)UPDATE table SET column = 0 WHERE id = (@P1)
但沒有參數... 有沒有什麼辦法讓完整的SQL查詢,包括參數?
否則我想我必須改變我所有的查詢在PHP中,不要使用sqlsrv_query()的'$ params'參數。
謝謝。
這正是我現在正在做的事情(帶有一點記錄功能)。我仍然希望有一個更簡單的方法,因爲現在我必須自己完成不同數據類型的轉換(int,string,DateTimes等),並且必須更改每個受影響的SQL查詢以使用我自己的函數而不是sqlsrv_query()。 – Robert 2014-10-24 15:23:16