Sql server SQL Server 2000:搜索整个数据库

Sql server SQL Server 2000:搜索整个数据库,sql-server,tsql,sql-server-2000,Sql Server,Tsql,Sql Server 2000,我的表中的某些记录如何在某一列中使用xyz值进行更新。在数百个存储过程、函数、触发器中,我如何确定哪些代码正在执行此操作。有没有一种方法可以通过数据库搜索代码的每个脚本 请提供帮助。一种方法是检查syscomments 包含每个视图、规则、, 默认、触发器、检查约束、, 默认约束,并存储 数据库中的过程。这个 文本列包含原始SQL语句 定义语句 如果您在查找该文本字符串时遇到困难,那么这些值可能来自一个表,也可能是在一个例程中连接起来的 试试这个 Select text from syscomm

我的表中的某些记录如何在某一列中使用xyz值进行更新。在数百个存储过程、函数、触发器中,我如何确定哪些代码正在执行此操作。有没有一种方法可以通过数据库搜索代码的每个脚本


请提供帮助。

一种方法是检查syscomments

包含每个视图、规则、, 默认、触发器、检查约束、, 默认约束,并存储 数据库中的过程。这个 文本列包含原始SQL语句 定义语句

如果您在查找该文本字符串时遇到困难,那么这些值可能来自一个表,也可能是在一个例程中连接起来的

试试这个

Select text from syscomments
where CharIndex('x', text) > 0 
and CharIndex('y', text) > 0 
and CharIndex('z', text) > 0

这可能会帮助您找到正确的例程,或者进一步指示值来自表

一种方法是检查syscomments

包含每个视图、规则、, 默认、触发器、检查约束、, 默认约束,并存储 数据库中的过程。这个 文本列包含原始SQL语句 定义语句

如果您在查找该文本字符串时遇到困难,那么这些值可能来自一个表,也可能是在一个例程中连接起来的

试试这个

Select text from syscomments
where CharIndex('x', text) > 0 
and CharIndex('y', text) > 0 
and CharIndex('z', text) > 0

这可能会帮助您找到正确的例程,或者进一步指示值来自表

这在SQL Server 2000中几乎是不可能做到的,因为更新很可能来自具有该值的变量,或者来自具有该值的另一个表的联接,而不是硬编码到存储的进程、触发器等中。更新也可能来自DTS包、作业、,一段由应用程序甚至查询分析器运行的动态代码,因此代码本身可能不会记录在数据库的任何位置

也许更好的方法是为有问题的表创建一个审计表,并让它记录生成更改的spid中的用户和代码以及新旧值。您必须等到它再次发生,然后才能确切地知道是什么改变了值,以及如果需要,将其放回什么值

或者,您可以在系统上运行探查器,直到它发生为止,但探查器往往会影响性能,在生产系统上运行通常不是一个好主意。如果这种情况经常发生,它可能是一种可接受的替代方案

这里有一个提示,提示您如何获得所编写的最终触发器代码所需的一些信息:

create table #temp (eventtype nvarchar (1000), parameters int, eventinfo nvarchar   (4000), myspid int)

declare @myspid int
select @myspid =@@spid

insert #temp (eventtype,parameters, eventinfo)
exec ('dbcc inputbuffer (@@spid)')
更新温度 设置myspid=@myspid

选择主机名、程序名、事件信息 从温度t 在t.myspid=s.spid上连接syss进程
其中spid=@myspid

这在SQL Server 2000中几乎不可能做到,因为更新很可能来自具有该值的变量,或者来自具有该值的另一个表的联接,而不是硬编码到存储的进程、触发器等中。更新也可能来自DTS包、作业、,一段由应用程序甚至查询分析器运行的动态代码,因此代码本身可能不会记录在数据库的任何位置

也许更好的方法是为有问题的表创建一个审计表,并让它记录生成更改的spid中的用户和代码以及新旧值。您必须等到它再次发生,然后才能确切地知道是什么改变了值,以及如果需要,将其放回什么值

或者,您可以在系统上运行探查器,直到它发生为止,但探查器往往会影响性能,在生产系统上运行通常不是一个好主意。如果这种情况经常发生,它可能是一种可接受的替代方案

这里有一个提示,提示您如何获得所编写的最终触发器代码所需的一些信息:

create table #temp (eventtype nvarchar (1000), parameters int, eventinfo nvarchar   (4000), myspid int)

declare @myspid int
select @myspid =@@spid

insert #temp (eventtype,parameters, eventinfo)
exec ('dbcc inputbuffer (@@spid)')
更新温度 设置myspid=@myspid

选择主机名、程序名、事件信息 从温度t 在t.myspid=s.spid上连接syss进程
其中spid=@myspid

可以使用sql profiler跟踪给定表/列的更新。

可以使用sql profiler跟踪给定表/列的更新。

它查找部分结果,但不是所有结果。我是这样用的。从syscomments中选择文本,其中的文本(如“%xyz%”)可以给出缺少的结果的示例吗?它会查找部分结果,但不会查找所有结果。我是这样用的。从syscomments中选择文本,其中的文本(如“%xyz%”)是否可以给出缺少的结果的示例?