欢迎阅读我们系列文章的第四部分,这将帮助您发现如何设计和使用数据库。这次,我们将深入研究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表的搜索结果
它显示:
- 对象的标识符以及对象所在的架构。
- 模式的名称和对象的名称。
- 对象类型和描述。
- 创建和修改对象的日期和时间。
要查找“项目”字符串的所有条目,可以使用以下脚本:
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”子字符串的搜索结果。
在查询中使用以下系统对象:
- sys.all_objects表。
- 模式名标量值函数。
通过此解决方案,您可以在所有数据库表中找到字符串值。让我们简化此解决方案,并显示如何使用以下脚本查找值“ 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输出可能如下:
图4。数据库搜索结果
在此,输出显示表的名称,哪些列存储包含子字符串“ 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窗口中按dbForge搜索。搜索窗口出现:
图。5 dbForge搜索的搜索窗口
您可以注意顶部面板(从左到右),因为您可以更改:
- 搜索模式(搜索DDL(对象)或数据)。
- 我们实际搜索的内容(哪个子字符串)。
- 区分大小写,搜索单词的完全匹配项或搜索字符串条目。
图6。搜索方式
你也可以:
- 使用顶部中间的按钮(两个正方形,用花括号将)按对象类型将结果分组。
- 选择搜索所需的对象类型:
图7。选择对象类型进行搜索
- 设置多个数据库进行搜索,然后选择一个MS SQL Server实例
这是对象搜索模式,即包含DDL时:
图8。按DDL对象搜索
在数据搜索模式下,唯一不同的是对象类型选择:
图9。依资料搜寻
也就是说,只有存储数据的表可供选择:
图10。选择表进行数据搜索
现在,以与以前相同的方式,让我们在对象名称中找到所有“ Project”子字符串条目:
图11。数据库对象名称中所有“项目”字符串条目的搜索结果
显然,搜索模式是由DDL对象设置的,我们正在寻找“ Project”字符串,因此已将其填充,其他所有内容均保留为默认设置。
选择检索到的对象时,您可以在下面看到给定对象及其父对象的定义代码。
同样,您可以通过按如下所示的按钮将导航切换到检索到的对象:
图12。将导航移至检索到的对象
您还可以按其类型对找到的对象进行分组:
图13。按类型分组的对象进行搜索的结果
请注意,甚至会显示包含名称中包含“ Project”子字符串的字段的表。但是,让我提醒您,可以更改搜索模式:搜索全部匹配或部分匹配,区分大小写。
现在,让我们在所有表中查找“ Ramiro”值:
图14。所有数据库数据中“ Ramiro”子字符串的搜索结果
请注意,将显示所选Employee表上所有包含“ Ramiro”子字符串的字符串。
同样,您可以像以前一样通过按下下面显示的按钮将导航切换到找到的对象:
图15。将导航移至找到的对象
结果,我们可以在数据库中搜索所需的对象和数据。
dbForge Studio for SQL Server,并通过30天免费试用版自行检查此功能!现dbForge Studio SQL Sever直降3000,在线订购正版授权最低只要1710元!
标签:
来源:慧都
声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!