永続テーブルと同じ列とタイプの一時テーブルを作成する必要があります。それを行う最善の方法は何ですか?通常、私はこのようなテーブルを作成永続テーブルと同じ列とタイプの一時テーブルを作成する最も良い方法
すなわち
(パーマネントテーブルには、100以上の列があります)。
しかし、カラム名とタイプに言及せずに、必要なカラムを持つ別のテーブルの名前を記述する方法はありますか?
永続テーブルと同じ列とタイプの一時テーブルを作成する必要があります。それを行う最善の方法は何ですか?通常、私はこのようなテーブルを作成永続テーブルと同じ列とタイプの一時テーブルを作成する最も良い方法
すなわち
(パーマネントテーブルには、100以上の列があります)。
しかし、カラム名とタイプに言及せずに、必要なカラムを持つ別のテーブルの名前を記述する方法はありますか?
select top 0 *
into #mytemptable
from myrealtable
+1 "where 0 = 1"となっていましたが、あなたのソリューションは高速です。 –
@ JoachimIsaksson - ちょうど興味のない、あなたはどのようにそれを測定しましたか?私は自分でいくつかの原油テストを行い、両者の間に違いは見られません。 –
@MikaelErikssonより深い分析はしませんでしたが、古いSQLサーバーを実行していて、テーブルまたはインデックスにアクセスしていないようですが、0 = 1がプライマリキーインデックスにアクセスしているようです。違いがどれほど大きいのかよく分かりませんが、テストする巨大なテーブルはありません。また、これは実装に依存すると思われますので、新しいバージョンでは異なる可能性があります。 –
Sortest 1 ...
select top 0 * into #temptable from mytable
注:これは一時の空のコピーを作成し、しかし、それはこれがある
これはすべてのデータも挿入します。 –
@ nathangonzalez:私は試して、ソリューションは完璧に働いた..ちょうどテーブルがデータなしで作成されました – Ananth
@Ananth、答えは私のコメントの後に編集されました。 –
select * into #temptable from tablename where 1<>1
私が間違っていない場合、ここでの落ち込みは、SQL Serverがテーブルの各行に対して1 <> 1を評価しなければならないということです。 –
@nathangonzalez:いいえ、それはありません。オプティマイザはそれほどダムではありません。 –
@ypercube、それから間違いだと思います。私はそれが一定のスキャンを参照してください。私がチェックしたはずだとします。 –
主キーを作成しません。 MySQL固有の答え、それ以外のところでは動作しない -
空のt
CREATE TEMPORARY TABLE temp_foo LIKE foo;
そして、あなたが持つ既存のテーブルの人口コピーを作成することができます:と同じ列定義を持つことができ
CREATE TEMPORARY TABLE temp_foo SELECT * FROM foo;
とpostgresの中に、次の作品を。残念ながら、異なるRDBMSさんはここで非常に一貫していないようです:
CREATE TEMPORARY TABLE temp_foo AS SELECT * FROM foo;
私はこの質問は非常に古いですが実現するが、PostgreSQLの固有の解決策を探している人のために、それはだ:、
CREATE TEMP TABLE tmp_table AS SELECT * FROM original_table LIMIT 0;
注意tempテーブルはpg_temp_3のようなスキーマに入れられます。
これは(インデックスなし)のすべての列を持つことになりますし、データなしで、しかし、あなたのニーズに応じて、あなたは主キーを削除することがあり、一時テーブルを作成します。
ALTER TABLE pg_temp_3.tmp_table DROP COLUMN primary_key;
場合元のテーブルにはデータが入っていないので、 "LIMIT 0"を省略することができます。
これは一時表ではなく、表変数です。 –
@ nathangonzalez-はい。質問を更新しています。私は答えが両方に適用されると信じています。 – Ananth
@Ananth、テーブル変数は明示的に宣言しなければならないので、もともとはそれが取得します。 tempテーブルは 'select into'ステートメントを使用して作成することができます。これは、ddl –