这次,我们将深入研究SQL Server中复杂的数据和对象搜索问题,在标准脚本的帮助下进一步进行此操作,然后再使用dbForge Search工具进行进一步的操作。
dbForge Studio for SQL Server为有效的探索、分析SQL Server数据库中的大型数据集提供全面的解决方案,并设计各种 表以帮助作出合理的决策。
dbForge Studio for 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_objectswhere [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_objectswhere [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 aoleft 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 ondeclare @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_nameopen sfetch next from s into @namewhile @@fetch_status = 0begin declare c cursor forselect 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 @nameendselect table_name as [Table Name], field_name as [Field Name], count(*) as [Found Mathes] from #rsltgroup by table_name, field_nameorder by table_name, field_namedrop table #rsltclose sdeallocate 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 scinner join sys.objects obj on sc.[id]=obj.[object_id]where sc.[text] like '%code snippet%'在此,输出显示对象的标识符,名称,描述和完整定义。
未完待续…….下一章我们将讲解如何使用dbForge搜索来搜索数据库数据和对象。
dbForge Studio for SQL Server,并通过30天免费试用版自行检查此功能!为庆祝中秋国庆来袭,现dbForge Studio SQL Sever直降3000,在线订购正版授权最低只要1710元!
![]()
标签:
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!