2015-05-05 88 views
0

假設我有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' ); 
... 

的DB的問題是SQL Server中,但我猜測該解決方案可以在MySQL和其他平臺上運行。

+0

我知道在MySQL中做這件事的唯一方法是使用'INFORMATION_SCHEMA'.'COLUMNS'和PREPARE-ing構造的查詢。 – Uueerdo

回答

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 
相關問題