65.9K
CodeProject 正在变化。 阅读更多。
Home

SQL Server 轻松列搜索

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2010年1月6日

CPOL

2分钟阅读

viewsIcon

32133

downloadIcon

11

列搜索功能,操作起来像 sp_help 一样简单。

引言

在 SQL Server 中开发查询时,你可能遇到需要列出所有包含特定列名的表的情况。当然,你可以使用 syscolumnssysobjects 等编写查询,但你每次都需要编写它,或者将其保存起来——我太懒了,不想这样做。在本文中,我们将创建一个存储过程,它将像 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 的技巧和窍门部分。享受吧!

© . All rights reserved.