隐藏 T-SQL 的选择输出

Gil*_*iam 13 sql-server t-sql

我正在尝试获取查询执行时间,但我也想隐藏查询输出。我只想要经过的时间 - 没有输出。

例子

DECLARE @Start datetime
DECLARE @End datetime

SELECT @StartTimeWA=GETDATE() 

SELECT 
       [id] 
      ,[database_id]
      ,[proc_name]
      ,[exec_t] from
  [DB].[dbo].[STAT] 

SELECT @End=GETDATE()

SELECT DATEDIFF(MS,@Start,@End) AS [Duration]
Run Code Online (Sandbox Code Playgroud)

目前,我得到了查询输出底部是我的持续时间,就输出而言,这是我唯一想要的。我一直无法做到这一点,想知道是否还有其他人遇到过类似的问题?这是我想在 T-SQL 中做的事情,而不是 Management Studio 或类似的东西。

我正在尝试监视运行 select 语句并向服务器报告所需的时间。我有一个外部监视器服务器,它将每分钟运行一次并获取时间(花费的持续时间),我将随着时间的推移使用它来趋势/基线。当当前查询吐出选择结果和我的持续时间时,它会扭曲它,并且我的监视器服务器变得混乱。我只想要持续时间列。我还将为插入执行此操作,这将很简单,因为它不需要执行选择。

我试图纯粹在 T-SQL 中做到这一点。我不想使用 DMV,因为我想在运行查询时获得所需的时间(快照),并检查当服务器经历不同级别的负载时这是否会随着时间的推移而改变,因为这会给我一个好主意关于查询执行时间是否发生变化。

Eri*_*ing 28

有很多不同的方法可以做到这一点。

我通常不建议插入到#temp表中,因为任何 tempdb 加载或自动增长都可能影响结果,而且我绝对不建议使用@table变量,因为对这些的修改是强制串行的(不能使用并行计划),这可能会更改实际查询时间。

变量赋值

您可以声明一个变量并将您的列分配给它,如下所示:

DECLARE @Start datetime
DECLARE @End datetime
DECLARE @blob_eater SQL_VARIANT;

SELECT @StartTimeWA=GETDATE() 

SELECT 
       @blob_eater = [id] 
      ,@blob_eater = [database_id]
      ,@blob_eater = [proc_name]
      ,@blob_eater = [exec_t] from
  [DB].[dbo].[STAT] 

SELECT @End=GETDATE()

SELECT DATEDIFF(MS,@Start,@End) AS [Duration]
Run Code Online (Sandbox Code Playgroud)

尽管这样做可能会阻止一些参数嵌入优化。请参阅“嵌入限制”下的参数嗅探、嵌入和重新编译选项

请注意,此方法可能会触发有关隐式转换的计划警告,但它们不是您必须担心的那种。有关背景信息,请参阅此问答:什么触发此警告:表达式中的类型转换可能会影响查询计划选择中的“CardinalityEstimate”

在 SSMS

您可以更改设置以丢弃查询结果。

坚果

SQL 查询压力

SQL Query Stress是一个开源工具,允许您针对 SQL Server 运行查询以模拟负载。运行时不会向应用程序返回查询结果。

您可以在此处阅读有关它的一些说明。

ostress(RML 实用程序)

ostress是一个类似的工具,由 Microsoft 发布,它也不会将结果返回给客户端,除非您选择这样做。

我在这里写了一些关于它的内容。

计划浏览器

SentryOne 的计划资源管理器是查看 SQL Server 执行计划和死锁的免费替代方法。

您还可以将其用作客户端来在某种程度上查询 SQL Serve:

坚果

这也会丢弃结果。

坚果

希望这可以帮助!