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