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 中填充我的日期维度表以获得具有此特定值的列?

拆分字符串并为 SQL Server 2008 R2 中表中的所有记录填充表

SQL Server 加入任何已填充值的列