簡體   English   中英

如何在SQL Server Management Studio中找出哪些數據庫的哪些表中具有給定名稱的列?

[英]How can i find out which tables in which databases have a column with a given name in SQL Server Management Studio?

在SQL Server 2016 Management Studio中,我有多個數據庫。

我想找出數據庫中的哪些表具有名稱包含字符串的列。 我怎樣才能做到這一點?

是否可以在“對象資源管理器”窗口中搜索?

您將需要迭代服務器上的數據庫,

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

您可以使用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表以獲得所需的結果

在每個數據庫上運行以下命令,或使用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%%表示任何前導或尾隨字符

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM