SQL server 表填充源
Posted
技术标签:
【中文标题】SQL server 表填充源【英文标题】:SQL server table population source 【发布时间】:2009-10-08 20:52:44 【问题描述】:我有一个审计数据库(由其他人创建)。
有些东西正在用表大小数据填充它(这是有道理的,因为它是审计数据库)。
SQL 服务器的作业太多。
我想知道审计表中填充了什么。
有没有类似 sys.cmets 之类的东西?哪个可以告诉我填充表的内容是什么,还是我必须检查每个作业中的代码?
问候
曼乔特
【问题讨论】:
这是什么版本的 SQL Server? SQL Server 2008 具有对审核的内置支持。触发器最常用于审计——你检查过它们吗? 它是:Microsoft SQL Server 2000 - 8.00.818 (X86) 我添加了一个 SQl Server 2000 版本 【参考方案1】:你可以尝试运行这样的东西:
SELECT DISTINCT
o.name,o.type_desc
FROM sys.sql_modules m
INNER JOIN sys.objects o ON m.object_id=o.object_id
WHERE m.definition Like '%YourTableName%'
ORDER BY 2,1
EDIT在OP提到SQL Server 2000之后
这应该适用于 SQl Server 2000:
--remove comments to see the actual text too
SELECT DISTINCT
o.name --,c1.colid,c1.text
FROM sysobjects o
INNER JOIN syscomments c1 ON o.id = c1.id
--join to next section of code in case search value is split over two rows
LEFT OUTER JOIN syscomments c2 ON o.id = c2.id AND c2.colid=c1.colid+1
WHERE c1.text Like '%YourTableName%'
OR RIGHT(c1.text,100)+LEFT(c2.text,100) Like '%YourTableName%'
ORDER BY 1--,2
【讨论】:
它试过了,但它抱怨 sys.sql_modules。我有 SQL 2000,这可以用吗?【参考方案2】:尝试查看命令列中的 msdb..sysjobsteps 以获得目标表名称;这仅在他们使用 T-SQL 填充表时才有效。如果他们使用的是 SSIS(或 DTS)包,这将不起作用。
【讨论】:
好的,您是否在 syscmets 中也没有发现任何东西?如果是这样,排除了触发器,我的建议排除了作业中的 sql 步骤。这会在作业(SQL 2000 上的 DTS 包)或 SQL Server 之外的应用程序中留下(AFAIK)二进制步骤。您可以查看子系统 'TSQL' 的 sysjobsteps 并开始处理这些包。【参考方案3】:很可能它是由审计表上的触发器填充的。
【讨论】:
它被一个从某个地方调用的存储过程填充......不知道在哪里。【参考方案4】:如果您知道导致数据进入审计表的原因,您可以针对数据库运行(非常)简短的 Profiler 会话,专门针对该表进行过滤,同时触发操作。这将为您提供进一步的步骤来回溯根操作。
【讨论】:
以上是关于SQL server 表填充源的主要内容,如果未能解决你的问题,请参考以下文章
从视图填充或创建表的 SQL Server 过程 - 性能问题
使用 Access 数据库表填充现有 SQL Server 数据库表
从 Excel 更新 SQL Server 表,然后填充剩余的列数据
如何在 SQL Server 中填充我的日期维度表以获得具有此特定值的列?