我正在研究大约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”(翻转)变成我想要的更合理的东西?