小编vCi*_*ion的帖子

如何在 SQL Server 2016+ 中使用查询存储查找哪个程序或用户执行了查询

启用查询存储后,如何查找执行查询的人。例如,在跟踪收集的情况下,TRC 文件将获取主机名和程序详细信息以供查询,而在扩展事件的情况下,我们有 XEL 文件将获取主机名和程序详细信息。我们尝试了代码

SELECT des.program_name,
des.host_name,
*
FROM sys.query_store_query_text qt -- Query Text
JOIN sys.query_store_query q ON qt.query_text_id = q.query_id -- Query Data
JOIN sys.query_store_plan qp on qp.query_id = q.query_id --  Query Plan
join sys.dm_exec_requests der on der.query_hash = q.query_hash -- Get session id for query
join sys.dm_exec_sessions des on des.session_id = der.session_id -- Session Info
order by q.last_execution_time desc
Run Code Online (Sandbox Code Playgroud)

下面的 DMV 返回查询哈希 (query_hash) 的空值,因此上面的查询没有数据

select * from sys.dm_exec_requests der
select * from sys.dm_exec_sessions des
Run Code Online (Sandbox Code Playgroud)

sql-server performance monitoring sql-server-2016 sql-query-store

6
推荐指数
1
解决办法
3089
查看次数

将 STUFF 与 INNER JOIN 查询结合使用

我的数据库中有三个表。产品表、类型表和名为 Prod_Type 的映射表。我的数据库是sql server,这就是为什么我不能使用group_concat函数而我正在使用Stuff函数。我的表结构如下

产品表

Prod_ID    |   Name    |   Brand
-------        ----        -----
   1       |   Name1   |   Brand1
   2       |   Name2   |   Brand2
   3       |   Name3   |   Brand3
   4       |   Name4   |   Brand4
   5       |   Name5   |   Brand5
   6       |   Name6   |   Brand6
   7       |   Name7   |   Brand7
Run Code Online (Sandbox Code Playgroud)

类型表

 Type_ID   |   TypeName
 -------       --------
    1      |   TypeName1
    2      |   TypeName2
    3      |   TypeName3
    4      |   TypeName4
    5      |   TypeName5
Run Code Online (Sandbox Code Playgroud)

产品类型表

  Prod_IDM   |  Type_ID
  --------      -------
     1      |     1
     1      | …
Run Code Online (Sandbox Code Playgroud)

sql sql-server select

4
推荐指数
1
解决办法
1万
查看次数