sql server动态收集数据库database下所有table的字段名称

收集指定database 下的所有table的列名

use reportservertempdb

--创建名称临时表,按名称顺序查询列信息
begin

declare @count int
declare @colid int
declare @i_id int
declare @i_rw int
declare @sql varchar(8000)

--删除表
begin try
drop table ZP_DatabasesColumnName
end try
begin catch
end catch
--创建临时表
select a.rw,a.name as table_name,b.name as column_name,b.colid as column_id into #temp_columns
from (select ROW_NUMBER() over(order by name) as rw ,name,id  from sys.sysobjects where xtype='u' ) as a
left join sys.syscolumns as b on a.id=b.id
order by a.name,b.colid

--select * from #temp_columns

select @count=max(rw),@colid=max(column_id) from #temp_columns
--创建表

begin
set @sql= 'create table ZP_DatabasesColumnName(table_name varchar(50)  primary key not null,'
set @i_id=1
while @i_id<=@colid
	begin 
	set @sql=@sql+'c'+convert(varchar(2),@i_id)+' varchar(50),'
	set @i_id=@i_id+1
	end
set @sql=@sql +')'
exec (@sql)
end

--插入表名
begin
	insert into ZP_DatabasesColumnName(table_name) 
	select distinct table_name from #temp_columns
end

--更新数据
set @i_id=1
while @i_id<=@colid
begin
set @sql='update ZP_DatabasesColumnName set ZP_DatabasesColumnName.c'+convert(varchar(3),@i_id)+
		'=#temp_columns.column_name from #temp_columns '+
		'where ZP_DatabasesColumnName.table_name=#temp_columns.table_name and #temp_columns.column_id='+convert(varchar(3),@i_id)
	exec (@sql)
	set @i_id=@i_id+1
end

--删除临时表
drop table #temp_columns
select * from ZP_DatabasesColumnName
end

猜你喜欢

转载自blog.csdn.net/rankiy/article/details/102852265
今日推荐