在日常的数据库操作中,经常需要查找包含特定列名的表。虽然可以通过编写查询语句来实现,但每次都需要重新编写或保存查询语句,这无疑增加了工作量。为了简化这一过程,本文将介绍如何创建一个存储过程,使其能够像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。