sqlserver遍历所有表和所有字段,双游标循环。

sqlserver遍历所有表和所有字段,双游标循环。

 

--sqlserver遍历所有表和所有字段,双游标循环。

begin
	declare @TableIdInt int
	declare @TableNameStr varchar(50)
	declare @ColumnIdInt int
	declare @ColumnNameStr varchar(50)
	--临时表是否存在
	declare @temptableCount int

	--声明内存表(非临时表)
	declare @t table(
	 tablename varchar(50),
	 columnname varchar(50)
	)
	----------------------------------------------
	--判断临时表是否存在
	select @temptableCount=count(1) from tempdb.dbo.sysobjects where id = object_id(N'tempdb..#AllTableAndColumn') and type='U'
	print(@temptableCount);
	if(@temptableCount<=0)
		begin
		--创建临时表
		create table #AllTableAndColumn(
		tableid int,
		tablename varchar(50),
		columnid int,
	    columnname varchar(50)
		)
		end
	else
		begin
		--清空临时表
		delete from #AllTableAndColumn
		print('清空了#AllTableAndColumn表')
		end
	----------------------------------------------
	--声明游标
	declare table_cursor cursor
	--"CloudBSS_Dev_20220211"是数据库名
	--XType='U'--:表示所有用户表; 
	--XType='S':表示所有系统表; 
	for(Select id,Name FROM CloudBSS_Dev_20220211..SysObjects Where XType='U')
	--打开游标
	open table_cursor

	--开始循环游标变量
	fetch next from table_cursor into @TableIdInt,@TableNameStr
	--遍历所有的数据,@@FETCH_STATUS函数返回值为0表示FETCH语句执行成功
	while @@FETCH_STATUS = 0 
		begin
		----------------------------------------------
		--声明游标
		declare column_cursor cursor
		for(Select id,Name FROM SysColumns Where id=Object_Id(@TableNameStr))
		--打开游标
		open column_cursor
		--开始循环游标变量
		fetch next from column_cursor into @ColumnIdInt,@ColumnNameStr
		--遍历所有的数据,@@FETCH_STATUS函数返回值为0表示FETCH语句执行成功
		while @@FETCH_STATUS = 0 
		begin
			insert #AllTableAndColumn select @TableIdInt,@TableNameStr,@ColumnIdInt,@ColumnNameStr;
			--转到下一个游标,没有会死循环。
			fetch next from column_cursor into @ColumnIdInt,@ColumnNameStr;
		end
		--关闭游标
		close column_cursor;
		--释放游标
		deallocate column_cursor;
		----------------------------------------------
		--转到下一个游标,没有会死循环。
		fetch next from table_cursor into @TableIdInt,@TableNameStr;
		end
	----------------------------------------------
	--关闭游标
	close table_cursor;
	--释放游标
	deallocate table_cursor;
	
	--查询结果
	select * from #AllTableAndColumn order by tablename,columnname;
end;

  

posted on 2022-10-26 17:13  Jankie1122  阅读(167)  评论(0编辑  收藏  举报