如何在SQL Server Management Studio中找出哪些数据库中哪些表具有给定名称的列?

时间:2017-03-27 15:59:07

标签: sql sql-server tsql

在SQL Server 2016 Management Studio中,我有多个数据库。

我想找出哪些数据库中哪些数据库有一个名称中包含字符串的列。我怎么能这样做?

是否可以在对象资源管理器窗口中进行搜索?

3 个答案:

答案 0 :(得分:2)

您需要在服务器上迭代数据库,

SELECT name FROM master.dbo.sysdatabases

使用

为每个命令执行以下命令
select table_name,COLUMN_NAME 
from INFORMATION_SCHEMA.columns 
where COLUMN_NAME like '% XXX %'

使用光标

    CREATE TABLE #tmpList (DatabaseName varchar(64),TableName varchar(64))
    DECLARE @DbName varchar(64)
    DECLARE @sql nvarchar(max)

    DECLARE @ColCursor  CURSOR


    SET @colCursor = CURSOR FOR
        SELECT [name] FROM master.dbo.sysdatabases

    OPEN @ColCursor
    FETCH NEXT FROM @ColCursor INTO @DBName

    WHILE @@FETCH_STATUS = 0
    BEGIN

        SET @sql = 'INSERT INTO #tmpList '+
                    'SELECT '''+@DbName+''',table_Name FROM '+@dbName+'.INFORMATION_SCHEMA.columns where COLUMN_NAME like ''% XXX %'' '
        EXEC(@sql)
        FETCH NEXT FROM @ColCursor INTO @DBName 
    END
    CLOSE @ColCursor;

select * from #tmpList
drop table #tmpList

答案 1 :(得分:2)

您可以使用sp_MSForeeachdb

此方法将为您服务器上的每个数据库收集 INFORMATION_SCHEMA.COLUMNS

Select * Into #TempFields From INFORMATION_SCHEMA.COLUMNS where 1=0

Declare @SQL varchar(max)=';Use [?]; Insert Into #TempFields Select * From INFORMATION_SCHEMA.COLUMNS '     
Execute master.sys.sp_MSforeachdb @SQL
Select * from #TempFields
 Where Column_Name Like '%XYZ%'
  

编辑 - 请求评论

第一个查询创建一个EMPTY结构来保存Information_Schema

然后我们DECLARE @SQL包含我们想要为每个数据库执行的SQL。请注意;使用[?];

然后我们只需选择#Temp表以获得所需的结果

答案 2 :(得分:1)

在每个数据库上运行以下命令,或使用cursordynamic sql迭代每个数据库

select A.name,B.name From sys.objects as A 
inner join sys.all_columns as B
on B.object_id = A.object_id

where A.type = 'U' and B.name = ...

<强>更新 对于模糊查找,使用B.name like '%serarch_pttern%%表示任何前导或尾随字符