为什么我的SQL查询没有返回任何内容?为什么一个查询会成功? 问题

为什么我的SQL查询没有返回任何内容?为什么一个查询会成功? 问题,sql,sql-server,sql-server-2012,health-monitoring,Sql,Sql Server,Sql Server 2012,Health Monitoring,我在服务器上运行的sql查询并不总是返回结果?这没有道理。编辑:我的问题是为什么下面的两个查询返回空(无数据)?它们应该像我的另一个查询一样返回数据。今天有很多疑问都在问我,我甚至不知道从哪里开始寻找原因 我是一名开发人员,被要求研究我们的TFS2013 sql server。这不是我的专业知识,但我今天学到了很多。不幸的是,这还不足以解决我最初的问题。我不断遇到新的。我很难找到sql server来帮助我。感觉就像 细节 那是空的。为什么?正如我所了解的,master应该是调用SQLServ

我在服务器上运行的sql查询并不总是返回结果?这没有道理。编辑:我的问题是为什么下面的两个查询返回空(无数据)?它们应该像我的另一个查询一样返回数据。今天有很多疑问都在问我,我甚至不知道从哪里开始寻找原因

我是一名开发人员,被要求研究我们的TFS2013 sql server。这不是我的专业知识,但我今天学到了很多。不幸的是,这还不足以解决我最初的问题。我不断遇到新的。我很难找到sql server来帮助我。感觉就像

细节

那是空的。为什么?正如我所了解的,master应该是调用SQLServer上masterDB的关键字?嗯

SELECT 
@@SERVERNAME as ServerName,
a.session_id,
datediff(ss, a.Start_Time, getdate()) as seconds, 
a.wait_type, 
a.wait_time, 
m.requested_memory_kb / 1024 as requestedMB,
a.granted_query_memory, 
m.dop,
a.command,
d.Name as DBName, 
a.blocking_session_id as blockedby, 
LTRIM(b.text) as sproc, 
substring(b.text, a.statement_start_offset /2, 
CASE WHEN 
    (a.statement_end_offset - a.statement_start_offset) / 2 > 0 
    THEN 
    (a.statement_end_offset - a.statement_start_offset) / 2
    ELSE 1 
END) as stmt, 
a.last_wait_type,
a.reads, 
a.writes,
a.logical_reads, 
a.cpu_time
FROM 
    sys.dm_exec_requests a with (NOLOCK)
OUTER APPLY sys.dm_exec_sql_text(a.sql_handle) b
LEFT JOIN 
    sys.dm_exec_query_memory_grants m (NOLOCK)
    on m.session_id = a.session_id
    and m.request_id = a.request_id
LEFT JOIN 
    sys.databases d
    ON d.database_id = a.database_id
WHERE 
    a.session_id > 50 
    AND a.session_id <> @@spid 
ORDER BY
    datediff(ss, a.Start_Time, getdate()) DESC
选择
@@服务器名作为服务器名,
a、 会话id,
datediff(ss,a.Start_Time,getdate())为秒,
a、 等等!,
a、 等等,
m、 请求的\u内存\u kb/1024作为请求的内存MB,
a、 已授予\u查询\u内存,
m、 dop,
a、 指挥部,
d、 名称为DBName,
a、 阻塞会话\u id为blockedby,
LTRIM(b.text)作为存储过程,
子字符串(b.text、a.statement\u start\u offset/2、,
当
(a.statement\u end\u offset-a.statement\u start\u offset)/2>0
然后
(a.语句\结束\偏移-a.语句\开始\偏移)/2
其他1
结束)作为stmt,
a、 最后一个等待类型,
a、 读到,
a、 写道,
a、 合乎逻辑的解释是,
a、 cpu时间
从…起
sys.dm_exec_使用(NOLOCK)请求
外部应用sys.dm_exec_sql_text(a.sql_handle)b
左连接
sys.dm_exec_query_memory_授予m(NOLOCK)
在m.session\u id=a.session\u id上
m.request\u id=a.request\u id
左连接
sys.d
在d.database\u id=a.database\u id上
哪里
a、 会话id>50
和a.session_id@@spid
订购人
datediff(ss,a.Start\u Time,getdate())描述
给我以下空白结果:

然后,我这样做,我得到了一些东西:

什么?为什么会这样?是因为我引用了一些sys.dm_操作系统的东西吗?但我在我庞大的查询中也引用了sys。完全糊涂了

尝试 这就是我向你们这些专业人士伸出援手的原因。我需要帮助。我从TFS2013 pro的一本书中获得了第二个非常大的查询,该书声称可以处理ANYsql server。它没有给我任何有用的反馈。我分享的第一个问题是必须的,似乎对其他人有用


我是否缺少在SQL2012上运行某些查询的权限?还是我真的很愚蠢,没有意识到我使用的是通用查询词,需要使其更具体

如果服务器没有执行任何操作,这些查询将不会返回任何数据。它从视图
sys.dm_exec_requests
开始,该视图列出了当前针对服务器执行的所有请求

注意,它还包含以下行:

AND a.session_id <> @@spid 
和a.session\u id@@spid

函数
@@spid
返回会话的ID,这意味着查询排除了您正在运行的查询中的数据以获取此数据,这是有意义的,因为您并不真正关心它。但是,如果希望查询始终返回行,请删除该行,每次运行时至少会看到一个条目。

您发布的每个查询都使用不同的视图,有什么问题?视图?为什么呢我不是dba,但根据我所学到的,我根本没有使用过CREATEVIEW命令。这些是单独的sql查询。例如,问题是@SERVERNAME作为SERVERNAME查询没有返回任何数据。Just fields names.sys.dm_exec_requests是一个视图,sys.dm_exec_query_memory_grants也是一个视图。很公平。但是,正如我看到的那样,查询是从视图中进行的(请参见:)?所以它应该会起作用。我也没有写那个查询。它出现在Pro TFS2013的书中,作为这个热门的“无所不能”诊断查询销售。您是否暗示书中给出的查询是错误的(因此没有数据)?请记住,sys.dm_exec_请求只返回当前正在执行的查询,它不会显示已经执行的查询。