我需要知道存在(或不存在)多个基数的某个表的行数。
这是我附带的:
DECLARE @NomeBase as char(60)
declare @base as char(100)
declare @select as char(1000)
DECLARE CBases CURSOR FOR select databasename from sig_orgao_web
--gets all my databases
OPEN CBases
FETCH NEXT FROM CBases INTO @NomeBase
WHILE (@@FETCH_STATUS = 0)
BEGIN
set @base =rtrim(@NomeBase) + '.dbo.sia_pais' -- database.dbo.table format
select @base
set @select = 'SELECT cast( count(*) as char(70)) from ' + @base
exec (@select)
FETCH NEXT FROM CBases INTO @NomeBase
END
CLOSE CBases
DEALLOCATE CBases
我知道表名必须是静态的,所以我要动态地创建选择语句。结果是这样的:
SIIG_DAT_DESENV.dbo.sia_pais
13
SIIG_DAT_HOMOLOGACAO.dbo.sia_pais
13
并继续下去。
问题是,如果该表在我的数据库中不存在,或者在Management Studio上运行此脚本的用户无法访问某个数据库,则将引发错误。
有一个更好的方法吗?
在每次迭代中检查对象是否存在:
set @select = 'IF Object_ID(''' + @base + ''') IS NOT NULL BEGIN SELECT cast( count(*) as char(70)) from ' + @base + ' END'
如果要检查每个数据库,则应尝试使用此漂亮的单行代码:
EXEC sp_msForEachDB 'IF Object_ID(''[?].dbo.sia_pais'') IS NOT NULL BEGIN SELECT Count(*) FROM [?].dbo.sia_pais END';
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句