假设我有10个表(Table1
- Table10
),每个表中有10列(比如Column1
- Column10
) - 表中的列名相同。我想在所有表中找到not NULL
的所有列,该表中至少有一行,并将它们插入到临时表中,例如@usedColumns
,稍后将在存储过程中使用。
假设您在任何或所有这些表中都有数百万条记录,那么最快,最有效的方法是什么?当前的实现使用UNPIVOT
,但我试图重新设计该存储过程,因为它的表现非常慢。或者UNPIVOT
真的是最有效的方式吗?
我想的一种方法是只检查if exists
,但无法弄清楚如何将其置于有效的循环中:
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和其他人。
答案 0 :(得分:0)
我会这样做。对不起,我正在用手机打字。
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