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

时间:2014-11-07 01:02:40

标签: sql sql-server sql-server-2012 health-monitoring

问题

我在服务器上运行的SQL查询并不总是返回结果?这没有意义。编辑:我的问题是为什么下面的两个查询返回空(没有数据)?他们应该像我的其他查询一样返回数据。很多问题今天都在向我提出,我也不知道哪里可以开始寻找原因。

我是一名被要求查看我们的TFS2013 sql server的开发人员。这不是我的领域知识,但我今天学到了很多东西。不幸的是,这还不足以弄清楚我原来的问题。我一直在尝试新的。我有一个艰难的时间试图让一个SQL服务器来帮助我。感觉就像this

详细

Empty

那是空的。为什么?据我所知,master应该是一个在sql server上调用master db的关键字?是吧?

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

给我以下空白结果: enter image description here

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

enter image description here

什么?这为什么有效?是因为我引用了一些sys.dm_os的东西吗?但我也在我的巨大查询中引用sys。完全糊涂了。

尝试

这就是为什么我要联系你的专业人士。我需要帮助。我从TFS2013专业书中获得了第二个非常大的查询,该书声称可以在 ANY sql server上运行。它没有给我任何有用的反馈。我分享的第一个查询是必须的,似乎正在为其他人工作。

我是否错过了在SQL2012上运行某些查询的权限?或者我是非常愚蠢而没有意识到我正在使用通用查询术语并且需要使其更具体?

1 个答案:

答案 0 :(得分:1)

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

请注意,它还包含以下行:

AND a.session_id <> @@spid 

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