数据库管理工具dbForge Studio for SQL Server使用教程:如何使用标准脚本进行数据和对象搜索

这次,我们将深入研究SQL Server中复杂的数据和对象搜索问题,在标准脚本的帮助下进一步进行此操作,然后再使用dbForge Search工具进行进一步的操作。

dbForge Studio for SQL Server为有效的探索、分析SQL Server数据库中的大型数据集提供全面的解决方案,并设计各种 表以帮助作出合理的决策。

dbForge Studio for SQL Server最新试用版

这次,我们将深入研究SQL Server中复杂的数据和对象搜索问题,在标准脚本的帮助下进一步进行此操作,然后再使用dbForge Search工具进行进一步的操作。

当我们需要找到以下信息时,我们经常会遇到这种情况:

  1. 数据库对象(表,视图,存储过程,函数等)。
  2. 数据(值和包含它的表)。
  3. 数据库对象定义中的代码片段。

使用标准脚本在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表的搜索结果

它显示:

  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_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”子字符串的搜索结果。

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

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

通过此解决方案,您可以在所有数据库表中找到字符串值。让我们简化此解决方案,并显示如何使用以下脚本查找值“ 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

输出可能如下:

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 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元!

850×68.png

标签:

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年8月6日
下一篇 2020年8月6日

相关推荐

发表回复

登录后才能评论