【发布时间】:2015-07-01 14:40:20
【问题描述】:
我需要在我将创建的新表(具有相同结构)中包含某个表、所有数据库的所有信息的“日志”。
但并非所有数据库都有此表。
我可以进行查询以查找具有我想要的此表的所有数据库:
SELECT name
FROM sys.databases
WHERE CASE
WHEN state_desc = 'ONLINE'
THEN OBJECT_ID(QUOTENAME(name) + '.[dbo].[tblLogdiscador]', 'U')
END IS NOT NULL
它只会列出我要记录的带有此表的数据库。但现在我需要做一个循环,通过所有数据库,将“tbllogdiscador”的信息插入到我创建的表中。我正在考虑使用 SP_MSFOREACHDB,但我看到很多人说不要使用它。
如何循环遍历所有具有该表的数据库,如果有,插入到新的日志表中??
下面的代码对我没有帮助:
exec sp_msforeachdb 'if ((select count(*)
from [?].sys.tables Where name in(''tbllogdiscador''))=1)
begin
insert into [The new tbl log]
select * from ?.dbo.tbllog
end
我正在尝试使用光标,但我遇到了问题。
任何想法如何用 WHILE 做到这一点?
【问题讨论】:
标签: sql sql-server sql-server-2008-r2 cursor