描述在数据库中查找数据和对象的一般需求
搜索数据以及数据库中的存储过程,表和其他对象是一个相当相关的问题,包括C#开发人员以及.NET开发人员。
经常会出现一种情况,您需要查找:
- 数据库对象(表,视图,存储过程,函数等)
- 数据(值和表所在的位置)
- 数据库对象定义中的代码片段
有许多现成的解决方案,包括付费和免费的。
首先,我们将研究如何使用内置的DBMS工具在数据库中搜索数据和对象,然后我们将研究如何使用免费的
dbForge Search实用程序来执行此操作。
使用内置的DBMS工具进行搜索
您可以使用以下脚本确定Employee表是否在数据库中:
按名称搜索表select [object_id], [schema_id], schema_name([schema_id]) as [schema_name], [name], [type], [type_desc], [create_date], [modify_date] from sys.all_objects where [name]='Employee';
结果可能是这样的:

显示如下:
- 对象的标识符以及对象所在的方案
- 该电路的名称和该对象的名称
- 对象的类型及其描述
- 创建对象的日期和时间以及上次修改的时间
要查找所有出现的“ Project”行,可以使用以下脚本:
通过名称中的子字符串搜索所有对象 select [object_id], [schema_id], schema_name([schema_id]) as [schema_name], [name], [type], [type_desc], [create_date], [modify_date] from sys.all_objects where [name] like '%Project%';
结果可能是这样的:

从结果中可以看到,这里的子字符串“ Project”不仅包含两个表Project和ProjectSkill,还包含一些主键和外键。
要了解这些键到底属于谁,我们添加了parent_object_id字段及其名称以及其所在的方案,如下所示:
通过名称中的子字符串搜索所有对象以及父对象的输出 select ao.[object_id], ao.[schema_id], schema_name(ao.[schema_id]) as [schema_name], ao.parent_object_id, p.[schema_id] as [parent_schema_id], schema_name(p.[schema_id]) as [parent_schema_name], p.[name] as [parent_name], ao.[name], ao.[type], ao.[type_desc], ao.[create_date], ao.[modify_date] from sys.all_objects as ao left outer join sys.all_objects as p on ao.[parent_object_id]=p.[object_id] where ao.[name] like '%Project%';
结果将是一个表,其中包含有关父对象的详细信息,即定义了主键和外键的位置:

在查询中使用以下系统对象:
因此,我们找出了如何使用内置的DBMS工具在数据库中查找对象。
现在,我们展示如何使用字符串搜索示例在数据库中查找数据。
要查找所有数据库表的字符串值,可以使用以下
解决方案 。 我们简化了该解决方案,并显示了如何使用以下脚本查找“ Ramiro”的值:
在所有数据库表中按子字符串搜索字符串值 set nocount on declare @name varchar(128), @substr nvarchar(4000), @column varchar(128) set @substr = '%Ramiro%' declare @sql nvarchar(max); create table
执行的结果可能是这样的:

表名显示在此处,包含子字符串“ Ramiro”的值存储在列中。 以及为找到的表列对找到的此子字符串的输入数。
要查找具有给定代码段的定义中的对象,可以使用以下系统视图:
- sys.sql_modules
- sys.all_sql_modules
- sys.syscomments
例如,使用最后一个视图,可以使用以下脚本在定义中找到给定代码片段的所有对象:
在数据库对象定义中搜索代码片段 select obj.[object_id], obj.[name], obj.[type_desc], sc.[text] from sys.syscomments as sc inner join sys.objects obj on sc.[id]=obj.[object_id] where sc.[text] like '%code snippet%';
对象的标识符,名称,描述和完整定义将在此处显示。
使用免费的dbForge搜索实用程序进行搜索
但是,使用现成的好的工具进行搜索更方便。
dbForge Search就是这样一种工具。
要在
SSMS窗口中调用此实用程序
,请单击按钮

。
将出现以下搜索框:

注意顶部面板(从左到右):
- 您可以切换搜索模式(查找DDL(对象)或数据)
- 直接寻找我们想要的(哪个子字符串)
- 是否区分大小写,搜索精确的单词匹配,搜索出现的词:

- 按对象类型分组结果-按钮

- 选择要搜索的必要对象类型:

- 您还可以指定几个数据库来搜索和选择MS SQL Server的实例
这全部处于对象搜索模式,即启用DDL时:

在数据搜索模式下,仅对象类型的选择将更改:

即,只有表可供选择,数据本身存储在其中:

现在,像以前一样,我们将在对象名称中找到所有出现的“ Project”子字符串:

如您所见,已选择了DDL对象的搜索模式,它填充了我们正在寻找的“ Project”行,其余的默认情况下都是如此。
突出显示找到的对象时,该对象或其整个父对象的定义代码显示在下面。
您还可以通过单击按钮将导航移动到找到的对象

:

您还可以按对象类型对找到的对象进行分组:

请注意,即使在那些表中也显示了一些名称包含子字符串“ Project”的字段。 但是,请记住可以更改搜索模式:搜索是否完全符合/部分/区分大小写。
现在,我们在所有表中找到值“ Ramiro”:

请注意,包含所选Employee表的“ Ramiro”子字符串的所有行都显示在下面。
您还可以像以前一样通过按按钮将导航移动到找到的对象

:

因此,我们可以在数据库中搜索必要的对象和数据。
结论
既使用MS SQL Server DBMS本身的内置工具,又使用免费的
dbForge Search实用程序检查了搜索数据本身和数据库中对象的方式。
Devart还提供了许多其他免费的现成解决方案,可在
此处找到其完整列表。
资料来源