欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SQLServer之查询当前服务器下所有目录视图表

程序员文章站 2022-09-04 13:48:21
SQL脚本 /*************1:删除临时表*************/ if exists(select * from tempdb..sysobjects where id=object_id('tempdb..#tempTable')) drop table #tempTable; ......

sql脚本

/*************1:删除临时表*************/
if exists(select * from tempdb..sysobjects where id=object_id('tempdb..#temptable'))
	drop table #temptable;

/*************2:定义游标*************/
declare databasenamecursor cursor for select name from master.dbo.sysdatabases;
declare @databasename nvarchar(512),@databasecount int;
set @databasecount=(select count(1) from master.dbo.sysdatabases);

/*************3:打开游标*************/
open databasenamecursor;

/*************4:连接游标*************/
fetch next from databasenamecursor into @databasename

/*************5:创建临时表*************/
create table #temptable
(
id int identity(1,1) not null,
databasename nvarchar(max),
schemaname nvarchar(max),
tablename nvarchar(max),
primary key(id)
);

/************6:循环插入临时表中*************/
while (@@fetch_status=0 and @databasecount>0)
	begin 
	    begin try
			set @databasecount=@databasecount-1;

			declare @tablefullname nvarchar(1024);
			set @tablefullname='select '''+@databasename+''',schema_name(schema_id),name from '+@databasename+'.sys.tables';

			insert into #temptable(databasename,schemaname,tablename)
			exec sp_executesql  @tablefullname;
			--指向下一个游标
			fetch next from databasenamecursor into @databasename  

		end  try
		begin catch
			continue;
		end catch
	end

/*************7:关闭游标*************/
close databasenamecursor;

/*************8:释放游标*************/
deallocate databasenamecursor;

/*************9:查看服务器所有表*************/
select * from #temptable 

  

sql脚本使用

先执行注释1,然后注释2到注释8脚本一起执行,最后执行注释9或者使用临时表。

sql执行结果

SQLServer之查询当前服务器下所有目录视图表