2016-09-20 59 views
0

私は10のテーブルを持っています。そのうちの4つのテーブルには99の列があり、6つのテーブルには100の列があります。私はUNION ALLを使用して結合する必要があります。エラーUNION ALLを使用して、異なるテーブルのSELECT文ですべての列(*)を使用する方法は?

メッセージ205、レベル16、状態1、行UNIONを使用して組み合わさ6つの すべてのクエリの下になってSQLクエリを実行するとき、INTERSECTまたはEXCEPT演算子は、それらの標的リスト内の式の数と同じ数を持っている必要があります。

エラーの理由は同じ列数ではないと理解しました。私はColumn100としてNULLを使用しようとしましたが、同じエラーが発生しています。

SQL照会で*とUNION ALLの使用方法を教えてください。

ありがとうございました。

+0

すべてのテーブルに同じ順序で列の名前を付けることができます。列がない場合は、SELECTにNULL AS MissingColumnNameを実行します。 SSMSでSELECT SQLを自動生成するには、テーブルを右クリックし、SELECT SQLを生成するオプションを選択します。これは、SELECT *を実行したかったからだと思います。理由はわかりませんあなたはSELECTを使用する必要があります* – Cato

+1

私は99列のテーブルを持っているシステムに疑問があります、それはあなたの状況に適しているかもしれませんが、私はまれにそのようなことを見た! – DavidG

+1

2つのテーブルを結合しようとすると、成功すればもう1つのテーブルが追加されます。テーブルスローエラーが発生したテーブルを他のテーブルと比較する –

答えて

2

余分な列は先頭や末尾で他の列であることをを発生した場合とまったく同じ順序である、あなたは手動で列を追加することができます。

select t99.*, 't99' as col 
from t99 
union all 
select t100.* 
from t100; 

をしかし、実際に、あります列を列挙するのは難しいですか?明示的な列リストは、エラーが発生しにくくなります。そして、100番目の列がどこに表示されるかに関係なく機能します。

テーブル名をクリックすると、SQL Server Management Studioでリストを取得できます。また、のようなクエリを実行することができます。

select column_name 
from information_schema.columns 
where table_name = 't99'; 

し、クエリを(私は多くの場合、この目的のためにスプレッドシートを使用)を構築するために列名を使用します。

+0

SSMSのテーブル名を右クリックしてから「スクリプトテーブル」を選択してから「選択」など – Cato

+0

ありがとう。私は列を一つずつ列挙しようとしました。それでも同じエラーが発生します。なぜ私はまだエラーが表示されるのか混乱しているのですか? – Amelia

+0

DBは何が欠けている列に置くべきかを知らないので、エラーが発生します。単一の結果セットが必要ですが、すべての情報をUNION ALLの1つの部分に提供するわけではありません。 –

0

UNIONはMATCHの前と後の列です。 99列と100列の和集合は使用できません。そのテーブルに存在しない100番目のカラムにダミーの値を指定するか、DBにスキップするように指示する必要があります。

だから、選択小さいテーブルに追加します。 NULL AS missing-column-name

か、リストのすべての共通の列手で両方に存在しない列を省略すること。

関連する問題