在日常的数据库操作中,经常需要查找包含特定列名的表。虽然可以通过编写查询语句来实现,但每次都需要重新编写或保存查询语句,这无疑增加了工作量。为了简化这一过程,本文将介绍如何创建一个存储过程,使其能够像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实例的主数据库中创建一个存储过程。
代码和原理都很简单,但效果却非常酷。首先,需要获取当前查询窗口的数据库名称:
SET @DataBase = (SELECT DB_NAME())
然后,构建一些动态SQL,包含当前查询窗口的数据库名称(与上面的查询相同),并执行它:
SET @SQL = 'SELECT a.name AS [Table],'
SET @SQL = @SQL + ' b.name as [Column] FROM ' + @DataBase + '..sysobjects a, ' + @DataBase + '..syscolumns b WHERE a.id = b.id AND a.xtype = ''u'' AND b.name like ''%' + @ColumnName + '%'' ORDER BY a.name, b.name'
EXEC (@SQL)
一旦创建了存储过程,就可以通过以下方式从当前查询窗口中搜索列名:
EXEC sp_column 'order'
使用Northwind数据库时,将得到以下结果:
此外,还可以在SQL ServerManagement Studio中为此配置一个键盘快捷键:
从工具菜单中选择选项。在左侧窗格下的环境部分,选择键盘。在其中一个可用的查询快捷键中,输入sp_column:
现在可以轻松地高亮显示正在搜索的列名,例如'order',然后按Ctrl + 3。