SQL Server 轻松列搜索





0/5 (0投票)
列搜索功能,操作起来像 sp_help
一样简单。
引言
在 SQL Server 中开发查询时,你可能遇到需要列出所有包含特定列名的表的情况。当然,你可以使用 syscolumns
、sysobjects
等编写查询,但你每次都需要编写它,或者将其保存起来——我太懒了,不想这样做。在本文中,我们将创建一个存储过程,它将像 sp_help
一样简单易用,只不过是针对列的搜索!
背景
为了更好地说明,下面是通常用于搜索列名的查询
SELECT sysobjects.name as "Table",
syscolumns.name as "Column"
from sysobjects , syscolumns
where sysobjects.id = syscolumns.id
and sysobjects.xtype = 'u'
and syscolumns.name like '%order%'
order by sysobjects.name, syscolumns.name
这将返回所有列名包含“order”文本的表。由于结果是我们想要的,我们将使用此查询作为解决方案的基础。
使用代码
正如我之前提到的,我们正在寻找一个类似于 sp_help
的解决方案;因此,我们将创建一个存储过程,该存储过程位于 SQL Server 实例的 Master 数据库中。
代码和原理很简单,但效果非常好。首先,我们需要活动查询窗口的数据库
SET @DataBase = (SELECT DB_NAME())
现在,我们使用活动查询窗口的数据库名称(与上面的查询相同)构建一些动态 SQL,并执行它。
SET @SQL = 'SELECT a.name AS [Table],'
SET @SQL = @SQL + ' b.name as [Column]'
SET @SQL = @SQL + ' from ' + @DataBase + '..sysobjects a , '
SET @SQL = @SQL + @DataBase + '..syscolumns b'
SET @SQL = @SQL + ' where a.id = b.id'
SET @SQL = @SQL + ' and a.xtype = ''u'''
SET @SQL = @SQL + ' and b.name like ''' + '%' + @ColumnName + '%''' + ''
SET @SQL = @SQL + ' order by a.name, b.name'
EXEC(@SQL)
瞧,一旦我们创建了存储过程,我们将能够以以下方式从活动查询窗口搜索列名
sp_column order
当使用 Northwind 数据库时,这将给我们以下结果
但是,还有更多
我们可以在 SQL Server Management Studio 中为此配置键盘快捷键
从“工具”菜单中,选择“选项”。从左侧窗格的“环境”下,选择“键盘”。在可用的查询快捷键之一中,输入 sp_column
现在,我们可以轻松地突出显示我们正在搜索的列的名称,例如 order
,然后按 Ctrl + 3。
关注点
在做这个的时候,我也遇到了 syscomments
,它使我们能够搜索存储过程和函数中的短语。这是一个简单而简洁的原理,我将把它发布到 The Code Project 的技巧和窍门部分。享受吧!