有没有办法确定如何更新表?我有一张正在更新的表,我无法弄清楚如何;通过代理工作? ssis包?触发?
我查询了dm_exec_query_stats和dm_exec_sql_text以确定正在运行的语句,但我不知道它的执行位置。
SELECT SQL_HANDLE, deqs.plan_handle, deqs.last_execution_time,
dest.text
FROM sys.dm_exec_query_stats AS deqs
CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest
WHERE dest.text LIKE '%Update%'
ORDER BY deqs.last_execution_time desc
答案 0 :(得分:0)
将此查询用于对特定表具有insert / update / select查询的任何相关存储过程。或者,如果您在表上有一个触发插入日期时间的触发器,则可以通过检查当前运行的查询来进行分析。
需要大量挖掘任何SSIS作业计划进行表更新,通常大多数更新都是通过SP完成的。以下查询只是一个快速检查。
SELECT DISTINCT QUOTENAME(OBJECT_SCHEMA_NAME(referencing.object_id)) + '.' + QUOTENAME(OBJECT_NAME(referencing.object_id)) AS SprocName
,QUOTENAME(OBJECT_SCHEMA_NAME(referenced.object_id)) + '.' + QUOTENAME(OBJECT_NAME(referenced.object_id)) AS ReferencedObjectName
,referenced.type_desc AS ReferencedObjectType
FROM sys.sql_dependencies d
INNER JOIN sys.procedures referencing ON referencing.object_id = d.object_id
INNER JOIN sys.objects referenced ON referenced.object_id = d.referenced_major_id
WHERE referencing.type_desc = 'SQL_STORED_PROCEDURE'
AND referenced.type_desc = 'USER_TABLE'
ORDER BY SprocName
,ReferencedObjectName
答案 1 :(得分:0)
您可以使用此代码
了解您的表格是否在stored procedure
,function
,view
或triggger
中被引用
假设您要查找的表名为tblMyTable
SELECT DISTINCT
o.name AS Object_Name,
o.type_desc,
m.*
FROM sys.sql_modules m
INNER JOIN sys.objects o ON m.object_id = o.object_id
WHERE m.definition Like '%tblMyTable%';
这将返回其文本中包含stored procedure
的所有function
,view
,triggger
或tblMyTable
,因此即使它只是从中读取。
所以你需要检查每一个,看它是否更新。
是的,它的一些工作,但至少它给你一个变化,以确定更新是否来自数据库中的任何对象。
如果没有返回任何内容,那么您就知道必须在客户端软件中搜索。
答案 2 :(得分:0)
我知道这可能不是一个很好的方法,我可能会被烧掉,但是,这就是我所做的......
我对表执行了一个打开的事务;锁定它。
BEGIN TRANSACTION
SELECT
TOP 1 *
FROM *tbl*
然后我查询了dm_exec_requests以找到正在运行的session_id
SELECT
sqltext.TEXT,
req.session_id
FROM sys.dm_exec_requests req
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS sqltext
然后我查询了dm_exec_sessions以找到正在运行该会话的host_name和program_name。
SELECT
host_name,
login_time,
program_name
FROM sys.dm_exec_sessions
WHERE session_id = 184
我能够确定罪魁祸首是托管在不同服务器上的SSIS包。关闭锁定事务
感谢所有人的帮助