2011-12-19 12 views

答えて

2

あなたはtable1が提供できないことを他の列に記入するリテラルを選択することができ、このような何か:デフォルトの値を取得します、あなたが列リストに名前を付けていない

insert into table2 (col_a, col_b, col_c, col_d) 
select top 1 col1, col2, 'foo', 'bar' 
from table1 
order by id desc 

任意の列、またはnullデフォルトが定義されていない場合

挿入列リスト内の列の数および型と一致しなければならない選択された列の数と種類。

+0

+1答えを簡単にしてくれてありがとう! –

2

は、本質的にテーブルにデータを挿入するには基本的に2つの方法がある:一つは、他のは、一度に複数行を挿入することで、一度にそれを一列を挿入することです。のは、個別にそれらのそれぞれを見てみましょう:

INSERT INTO table_name (column1, column2, ...) 
VALUES ('value1', 'value2', ...) 

INSERT INTOの第二のタイプは、テーブルに複数の行を挿入することを可能にします。前の例とは異なり、すべての列の値を指定して単一の行を挿入する場合は、SELECT文を使用して表に挿入するデータを指定します。これが別のテーブルの情報を使用しているかどうかを考えているなら、正しいものです。構文は次のとおりです。

Insert into table2 
select top 1 t1.col1,t1.col2 from table1 t1 order by id desc 

それとも、このようなあなたの構文を使用することができます:

INSERT INTO table1 (column1, column2, ...) 
SELECT t2.column3, t2.column4, ... 
FROM table2 t2 

をので、あなたの場合には、あなたはこのようにそれを行うことができます

declare @col1 type_of_col1, @col2 type_of_col2 
select top 1 @col1 = t1.col1, @col2 = t1.col2 from table1 t1 order by id desc 

Insert into table2 values(@col1, @col2) 

Offcourse、これはすべて、列データ型が一致していることを前提としています。

+0

これは、 'col1'と' col2'列は、2つの表の間に同じ名前であることを意味します。これは当てはまらないかもしれません。 – fge

+0

@fgeはoffcourse、私はそれを前提とし... –

+0

文字リテラルは二重引用符、単一引用符で囲む必要はない: 'VALUES( 'VALUE1'、...)' –

関連する問題