我正在开发一个 SQL 服务器数据库,其中包含订单和机器,执行这些订单。一台机器不能同时分配一个以上的活动订单。换句话说:这个 SQL 请求永远不会产生结果:
SELECT MachineId
FROM Orders
WHERE (Orders.Status=1)
GROUP BY MachineId
HAVING COUNT(Id)>1
我在 Microsoft SQL Server Management Studio 环境中打开了这个 SQL 请求,每次按F5时,我确实看不到任何结果。
但是,我确信 SQL 查询在某些时候确实会产生结果,并且我对那些时间以及那个时候该查询的结果很感兴趣。
有人知道我如何找到这个吗?(“归档日志”标签只是一个想法)
提前致谢
我将创建一个唯一过滤索引并跟踪唯一约束违规。它首先防止了错误的数据,并且与定期轮询表不同,您不会错过发生的情况。
定义是
然后我会使用
error_reported
Extended 事件来跟踪具体的错误号,它可能是:并获取一些额外的信息,如,
app_name
等以找到根本原因。host_name
tsql_stack
我在这里发布有关使用扩展事件调试错误的博客
https://straightforwardsql.com/posts/investigating-errors-with-extended-events/
创建一个日志表。将您的查询更改为
根据需要使用 SQL 代理运行此查询。(最短间隔为 1 分钟。)
问题是您只能看到查询每隔几分钟执行的几毫秒内存在的错误——这只是系统运行时间的一小部分。如果您将时间跟踪添加到订单,您可以看到发生的每一个变化。然后,您可以对此历史记录运行分析查询以检测错误。如果需要,可以将历史记录复制到单独的存档数据库中,并在不再需要时从操作数据库中删除,以保持该数据库的精简。