9

我有这个查询可以找到与某个数据库的列名匹配的所有表和视图。我正在使用SQL SERVER 2008

SELECT table_name FROM information_schema.columns
WHERE column_name = 'product_name'

我想扩展我的查询功能以搜索所有数据库,甚至查找具有我搜索的列名的存储过程。

4

7 回答 7

11

此脚本将在所有数据库的所有表中搜索您的列。

Create table #yourcolumndetails(DBaseName varchar(100), TableSchema varchar(50), TableName varchar(100),ColumnName varchar(100), DataType varchar(100), CharMaxLength varchar(100))

EXEC sp_MSForEachDB @command1='USE [?];
    INSERT INTO #yourcolumndetails SELECT
    Table_Catalog
    ,Table_Schema
    ,Table_Name
    ,Column_Name
    ,Data_Type
    ,Character_Maximum_Length
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE COLUMN_NAME like ''%yourcolumnname%'''

select * from #yourcolumndetails
Drop table #yourcolumndetails 
于 2014-04-11T06:14:02.523 回答
2

您可以使用此查询来查找在 SP/View 或 Function 中使用的字段名称

SELECT 
    OBJECT_NAME(object_id) as 'Procedure/Function/View Name',
    definition
    --,*
FROM sys.sql_modules
WHERE 
    ( definition LIKE '%' + '<Your_Field_Name>' + '%' )
于 2013-09-25T14:05:39.653 回答
1

跨数据库查找代码,我发现的最简单的方法是在每个数据库中使用下面的 SQL 使用一个视图,然后放入一个主视图,将它们跨数据库联合起来。如果你有大量的数据库或一些你无法触摸的数据库,那会有点痛苦,但对我来说效果很好。

select
    s.name as SchemaName,
    objs.name as ObjectName,
    objs.ObjectType,
    OBJECT_DEFINITION(objs.object_id) AS ObjectDefinition
from
    (SELECT object_id, name, 'Proc' as ObjectType
    FROM    sys.procedures p
        UNION
    select  object_id, name, 'View'
    from    sys.views 
        UNION
    SELECT  object_id, Name, type
    FROM    sys.objects o
    WHERE   o.[type] IN ('fn', 'fs', 'ft', 'if', 'tf')) objs
    inner join sys.objects o
        on objs.object_id=o.object_id
    inner join sys.schemas s
        on o.schema_id=s.schema_id

列(如在服务器上任何数据库的抽象表中查找列),你可以做同样的事情,只是 UNION 信息模式,但这对我想要的不起作用,所以我正在寻找一个更通用的解决方案 - 如果我找到它会添加它!

于 2013-06-12T22:41:55.630 回答
0

要在程序中搜索,请使用 information_schema.routines

于 2012-08-21T08:58:17.887 回答
-1

您在没有 mysql 管理员权限的情况下运行此查询,因此它仅显示您有权访问的数据库/表

于 2012-08-21T09:00:11.210 回答
-1
select * from information_schema.tables
where table_name like upper('%email%'); '

说明:
Table_name 是
帮助我找到列“电子邮件”的所有命令的名称 > 采取的步骤:

show databases ;
show tables;
select * from information_schema.tables;

select * from information_schema.tables
where table_name like upper('%email%');'
于 2018-07-19T14:54:49.503 回答
-1
DECLARE @colName NVARCHAR(30)

声明 @insertCMD NVARCHAR(256)

CREATE TABLE #yourcolumndetails ( DBaseName VARCHAR(100) ,TableSchema VARCHAR(50) ,TableName VARCHAR(100) ,ColumnName VARCHAR(100) ,DataType VARCHAR(100) ,CharMaxLength VARCHAR(100) )

SET @colName = UPPER('你的列名')

SET @colName = '''%' + @colName + '%'''

打印@colName

SET @insertCMD = '使用 [?]; INSERT INTO #yourcolumndetails SELECT Table_Catalog ,Table_Schema ,Table_Name ,Column_Name ,Data_Type ,Character_Maximum_Length FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME like' + @colName

打印@insertCMD

EXEC sp_MSForEachDB @command1 = @insertCMD

选择 * 从 #yourcolumndetails

删除表#yourcolumndetails

于 2021-03-18T17:28:01.927 回答