mysql - 如何获取各个表中使用的所有列?

标签 mysql sql-server stored-procedures

假设我有 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/

相关文章:

mysql - 数据库中的数据库(表设计)

c# - 我应该为每个类别使用单独的表还是一个表来存储分类网站的所有属性?

sql - 带 array_to_string 的 Postgresql 请求

php - 想要获取前 9 条记录并再创建一条记录,该记录在 mysql 中为 “Others”

php - Laravel 无法连接到其他数据库服务器

sql - 在 T-SQL 中解析 XML

php - 在 PHP 中通过 POST 传递数组以插入到 MySQL 中

mysql - 在mysql存储过程中声明变量

c# - 从 C# 将 GUID 存储在 MySQL 中

php - 数据库 Controller -php中的连接错误