2017-02-22 13 views
1

10個の異なるDBから派生した40個の表のUNION 25フィールドを使用しようとしています。共用体エラーの原因となる列を特定する方法

私は一緒に労働組合にそれらすべてを試したとき、私は次のエラーを受け取った:

をUNION、INTERSECTまたはEXCEPT演算子を使用して組み合わさすべてのクエリが が彼らのターゲットリスト内の式の数と同じ数を持っている必要があります。

どのフィールドが同じフォーマットでないかを特定する最速の方法は何か、またはSASのような「強制」コマンドを使用してこれらのテーブルを結合する別の方法があります。私は現在のSQL Server 2014

+5

列の型がテーブル間で異なるのではなく、各UNIONedクエリのSELECT句に同じ数の列を持たないことを伝えません。あなたのSQLを表示する –

+7

私は、選択している列の数を実際に知ることなく、1つ以上の場所で 'SELECT *'を使用していると思います。 'UNION'の各部分に対して同じ数字を持ち、理想的には型を入れるように' SELECT'を細工してください。 –

+1

共用体の一部をコメント化して、照会を再実行してください。 successfulyを実行した場合、問題はコメントアウトされたセクションにあります。 – PeterRing

答えて

1

を使用しています

はおそらく最速の方法はinformation_schema.columnsを使用することです。例えば、あなたが各テーブルにselect *を使用している、場合は、列が表示されたテーブルをカウントすることにより、問題のある列(複数可)を取得することができます:

select column_name, count(*) 
from information_schema.columns 
where table_schema = @schema and 
     table_name in (. . .) 
group by column_name 
having count(*) <> 40; 

私は、この目的のためにselect *を使用すると、貧しい人々を示していることに注意しますデータベース設計。同じフォーマットの複数のテーブルではなく、すべてのデータを1つのテーブルにまとめる必要があります。

関連する問題