在表中搜索多个数据库中的特定列名称

时间:2018-06-21 14:49:17

标签: sql-server-2012

我正在研究大约200个数据库,每个数据库都有几乎相同的结构。

我正在尝试在所有数据库中搜索1个特定表中的1个特定列。如果该列不存在,则返回数据库名称。

我写了一个游标来做到这一点,但是我对如何返回数据库名称感到困惑。

set nocount on;   
DECLARE @db_name NVARCHAR (150)
DECLARE c_db_names CURSOR FOR
SELECT name 
FROM sys.databases
WHERE name like ('B1%') --might need to exclude more dbs

OPEN c_db_names
FETCH c_db_names INTO @db_name
WHILE @@Fetch_Status = 0

begin
Exec('
 SELECT 'code for returning DB name goes here' 
        ,c.name  AS 'ColumnName'
        ,t.name AS 'TableName'    

 FROM '+  @db_name + '.sys.columns c
 JOIN '+  @db_name + '. sys.tables  t   ON c.object_id = t.object_id 
 WHERE 1=1 
    and c.name like %MyName%'    
     ')
  FETCH c_db_names INTO @db_name
END    
CLOSE c_db_names
DEALLOCATE c_db_names

这里有任何建议,甚至对如何更有效地做到这一点有想法?我不喜欢游标,但是它们有其​​用途。

另外,我该如何将“ LIKE”(翻转)变成我想要的更合理的东西?

0 个答案:

没有答案