ADO.NET参数导致超时

ADO.NET Parameter causes a timeout

我有一个大的讨厌的数据透视查询,我通过 ADO.NET 从 C# 运行。我在 2 个地方使用它,在 1 个地方我想要数据,但在另一个地方我只想要结构(没有数据)。所以在查询中我在 where 子句中添加了:

1 = @test

所以在我只想要 table 结构的查询中,我将 @test 设置为 2,效果很好。但是,在查询中我想要将其设置为 1 的数据,但该查询随后超时(5 分钟后)。如果我将 sql 拉入 sql 服务器并手动设置参数,它会在 3 分钟内返回。如果我从我的 C# 应用程序中完全删除 1 = @test,它会在 3 分钟内恢复正常。如果我在我的 C# 应用程序中硬编码 1 = 1,它会在 3 分钟内恢复正常。

我还在这个查询中添加了一个日期参数,效果很好。

我的问题是,@test 参数究竟是什么导致超时的发生?

有没有办法查看 ADO.NET 真正发送到 SQL 服务器以供我查询的内容?

简单的答案是当您只需要做一个结构时修改实际查询,以便它包含您的 1=@test。这样将创建两个单独的查询计划,每种查询计划一个,这两个查询计划都将针对它实际需要执行的查询进行最佳优化。