如何在SQL Server中搜索数据库对象和表数据

欢迎阅读我们系列文章的第四部分,这将帮助您发现如何设计和使用数据库。这次,我们将深入研究SQL Server中复杂的数据和对象搜索问题,将首先在标准脚本的帮助下进一步进行此操作,然后再使用dbForge Search工具进行进一步的操作。

使用标准脚本在SQL Server中进行数据和对象搜索

让我们首先展示如何在标准脚本的帮助下执行此操作。
您可以使用以下脚本在数据库中搜索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'

该脚本的结果如下:

运行脚本后显示的结果

图1。Employee表的搜索结果

它显示:

  1. 对象的标识符以及对象所在的架构。
  2. 模式的名称和对象的名称。
  3. 对象类型和描述。
  4. 创建和修改对象的日期和时间。

要查找“项目”字符串的所有条目,可以使用以下脚本:

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%'

结果将是下表的输出:

该表显示“项目”子字符串的搜索结果

图2。所有数据库对象中“ 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%'

结果将是带有有关父对象的详细信息的表输出,这意味着在其中指定了主键和外键:

显示有关父对象的详细信息的输出

图3。带有父对象详细信息的所有数据库对象中“ Project”子字符串的搜索结果。

在查询中使用以下系统对象:

  1. sys.all_objects表。
  2. 模式名标量值函数。

通过此解决方案,您可以在所有数据库表中找到字符串值。让我们简化此解决方案,并显示如何使用以下脚本查找值“ Ramiro”:

set nocount on  declare @name varchar(128), @substr nvarchar(4000), @column varchar(128)  set @substr = '%Ramiro%' declare @sql nvarchar(max); create table #rslt   (table_name varchar(128), field_name varchar(128), [value] nvarchar(max))    declare s cursor for select table_name as table_name from information_schema.tables where table_type = 'BASE TABLE' order by table_name  open s  fetch next from s into @name  while @@fetch_status = 0  begin   declare c cursor for   select quotename(column_name) as column_name from information_schema.columns    where data_type in ('text', 'ntext', 'varchar', 'char', 'nvarchar', 'char', 'sysname', 'int', 'tinyint') and table_name  = @name   set @name = quotename(@name)   open c   fetch next from c into @column   while @@fetch_status = 0   begin     --print 'Processing table - ' + @name + ', column - ' + @column       set @sql='insert into #rslt select ''' + @name + ''' as Table_name, ''' + @column + ''', cast(' + @column +   ' as nvarchar(max)) from' + @name + ' where cast(' + @column + ' as nvarchar(max)) like ''' + @substr + '''';   print @sql;       exec(@sql);       fetch next from c into @column;  end   close c   deallocate c   fetch next from s into @name  end  select table_name as [Table Name], field_name as [Field Name], count(*) as [Found Mathes] from #rslt  group by table_name, field_name  order by table_name, field_name    drop table #rslt  close s  deallocate s

输出可能如下:

SQL数据库中的搜索结果

图4。数据库搜索结果

在此,输出显示表的名称,哪些列存储包含子字符串“ Ramiro”的值,以及找到的匹配表列的该子字符串的找到的输出数。

要查找其定义包含给定代码片段的对象,可以使用以下系统视图:

  1. sys.sql_modules
  2. sys.all_sql_modules
  3. 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窗口中按dbForge搜索。搜索窗口出现:

SQL搜索工具的搜索窗口

图。5 dbForge搜索的搜索窗口

您可以注意顶部面板(从左到右),因为您可以更改:

  • 搜索模式(搜索DDL(对象)或数据)。
  • 我们实际搜索的内容(哪个子字符串)。
  • 区分大小写,搜索单词的完全匹配项或搜索字符串条目。

用于设置搜索的模式

图6。搜索方式

你也可以:

  • 使用顶部中间的按钮(两个正方形,用花括号将)按对象类型将结果分组。
  • 选择搜索所需的对象类型:

在SQL数据库中选择要搜索的对象类型

图7。选择对象类型进行搜索

  • 设置多个数据库进行搜索,然后选择一个MS SQL Server实例

这是对象搜索模式,即包含DDL时:

DDL对象的搜索模式

图8。按DDL对象搜索

在数据搜索模式下,唯一不同的是对象类型选择:

数据搜索方式

图9。依资料搜寻

也就是说,只有存储数据的表可供选择:

选择我们要搜索数据的表

图10。选择表进行数据搜索

现在,以与以前相同的方式,让我们在对象名称中找到所有“ Project”子字符串条目:

搜索所有“项目”子字符串条目的结果

图11。数据库对象名称中所有“项目”字符串条目的搜索结果

显然,搜索模式是由DDL对象设置的,我们正在寻找“ Project”字符串,因此已将其填充,其他所有内容均保留为默认设置。

选择检索到的对象时,您可以在下面看到给定对象及其父对象的定义代码。

同样,您可以通过按如下所示的按钮将导航切换到检索到的对象:

用于将导航移动到找到的对象的按钮

图12。将导航移至检索到的对象

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

按对象类型分组的搜索结果

图13。按类型分组的对象进行搜索的结果

请注意,甚至会显示包含名称中包含“ Project”子字符串的字段的表。但是,让我提醒您,可以更改搜索模式:搜索全部匹配或部分匹配,区分大小写。

现在,让我们在所有表中查找“ Ramiro”值:

如何在SQL Server中搜索数据库对象和表数据

图14。所有数据库数据中“ Ramiro”子字符串的搜索结果

请注意,将显示所选Employee表上所有包含“ Ramiro”子字符串的字符串。

同样,您可以像以前一样通过按下下面显示的按钮将导航切换到找到的对象:

导航移到找到的对象

图15。将导航移至找到的对象

结果,我们可以在数据库中搜索所需的对象和数据。

dbForge Studio for SQL Server,并通过30天免费试用版自行检查此功能!现dbForge Studio SQL Sever直降3000,在线订购正版授权最低只要1710元!

850×68.png

标签:

来源:慧都

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年1月3日
下一篇 2021年1月3日

相关推荐

发表回复

登录后才能评论