假设我有 10 个表 (Table1
- Table10
),每个表中有 10 列(假设 Column1
- Column10
) - 跨表的相同列名。我想找到所有表中至少一行 not NULL
的所有列,并将它们插入到临时表中,例如稍后将使用的 @usedColumns
存储过程。
假设您在任何或所有这些表中都有数百万条记录,那么最快、最有效的方法是什么?当前的实现使用 UNPIVOT
,但我正在尝试重新设计该存储过程,因为它的运行速度非常慢。或者 UNPIVOT
真的是最有效的方法吗?
我想到的一种方法是仅检查是否存在
,但无法弄清楚如何将其放入有效的循环中:
if exists (select top 1 1
from Table1
where Column1 is not null)
insert into @usedColumns ( table_name, column_name )
values ( 'Table1', 'Column1' );
if exists (select top 1 1
from Table1
where Column2 is not null)
insert into @usedColumns ( table_name, column_name )
values ( 'Table1', 'Column2' );
...
有问题的数据库是 SQL Server,但我猜该解决方案也适用于 MySQL 和其他数据库。
最佳答案
我会这样做。抱歉,我是用手机打字的。
declare @sql nvarchar(max)
declare @count int = 1
declare @tablename nvarchar(20)
while @count < 11
begin
select @tablename = concat('table', @count)
select @sql = concat('select * from '
, @tablename
, ' where column1 is not null...')
--select @sql
exec sp_sqlexec @sql
select @count = @count + 1
end
关于mysql - 如何获取各个表中使用的所有列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30064724/