Search a column name across all databases

无人久伴 提交于 2019-12-30 08:58:09

问题


I have this query that finds all tables and views that matches my column name of a certain database. I am using SQL SERVER 2008

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

I want to extend the capability of my query to search across all databases and even look for Stored procedures whose having my searched column name.


回答1:


This script will search your column in all tables across all databases.

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 



回答2:


You can use this query for find field name that used in SP/View or Function

SELECT 
    OBJECT_NAME(object_id) as 'Procedure/Function/View Name',
    definition
    --,*
FROM sys.sql_modules
WHERE 
    ( definition LIKE '%' + '<Your_Field_Name>' + '%' )



回答3:


Finding code across databases, the easiest way I've found is to sling a view with the below SQL in each DB then put in a master view that UNIONs them across the DBs. Bit of a pain if you've got loads of DBs or some you can't touch, but works well otherwise for me.

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

Columns (as in find a column in an abstract table on any database on the server), you could do the same thing and just UNION the information schemas, but that won't work for what I want so I'm on the hunt for a more general solution - will add it if I find it!




回答4:


You run this query without mysql admin privileges, so it shows you only databases/tables to which you have access




回答5:


To search in procedures use information_schema.routines




回答6:


select * from information_schema.tables
where table_name like upper('%email%'); '

Explain:
Table_name is the name of the column
all commands that helped me find the columns 'email' > Steps taken:

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

select * from information_schema.tables
where table_name like upper('%email%');'


来源:https://stackoverflow.com/questions/12051216/search-a-column-name-across-all-databases

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!