2017-02-07 29 views
1

他のテーブルから挿入する方法を知っていますが、私の問題は少し複雑です。私は以下のようなテーブルを持っています。SQL Server:別のテーブルからテーブルを選択して挿入する

表1:

Col1 | Col2 | Col3 | ..... | Col20 

表2:

Col1 | Col2 | Col3 | ..... | Col20 

両方のテーブルが同一です。私がしたいのは、表1のすべての値を表2に挿入することですが、1つの列を残すだけです(Col20など)。カスタム値でその列を挿入したいと思います。私は以下のように1対1の列をマッピングすることでこれを行うことができます。

Insert into table1(Col1, Col2, ..., Col20) 
    select Col1, Col2, ..., @customvalue 
    from table2 

私はこの方法で行っているだろうが、私はそのストアドプロシージャが長い作り、このクエリを複数の時間内のストアドプロシージャを使用する必要があります。しかし、私はこのクエリを短縮したいです。他に良い方法はありますか?

+1

その挿入文をストアドプロシージャまたはudfにカプセル化し、必要な回数だけメインプロシージャを配置するだけで済みます。 insert ... selectを実行する良い方法はありません。 –

+0

ストアドプロシージャのカプセル化という用語に慣れていません。私を理解するのに役立つ参考資料を私に提供できますか? @ Zohar – Amir

+1

カプセル化は、この場合、単に挿入(ストアドプロシージャまたはこの場合はudf)を実行するメソッドを作成することを意味します。その後、毎回insert文を書くのではなく、そのメソッドを実行することができます。 –

答えて

1

...しかし、私は、ストアドプロシージャが長いことを確認ストアド・プロシージャ内でこのクエリを複数回使用する必要があります....

最も簡単な方法は、その唯一の意志ストアドプロシージャを作成することです挿入を行い、その後、あなたはあなたのメインのストアドプロシージャにする必要がある場合は、必ずそれを呼び出す:あなたのメインの手順では、

CREATE PROCEDURE CopyFromTable1ToTable2 
(
    @CustomValue int -- or whatever data type you need 
) 
AS 

INSERT INTO Table1 (Col1, Col2... Col120) 
SELECT Col1, Col2,.... @CustomValue 
FROM Table2 

すると、ちょうどこの操作を行います。

EXEC CopyFromTable1ToTable2 1 
... 
EXEC CopyFromTable1ToTable2 3 

など。

+0

ありがとうございます。これはより良い方法です。 – Amir

0

2番目のテーブルの列セットにユーザー定義のテーブルタイプを使用できるかどうか試してみてください。 table2のすべての必須列をこの新しい表の型に定義します。そして、このテーブルタイプのオブジェクトを使用してクエリに使用し、必要なコードを減らします。繰り返し使用するために新しいUDFを構築し、この新しいタイプをパラメーターの1つとして渡すことができます。

https://technet.microsoft.com/en-us/library/bb522526(v=sql.105).aspx

私はあなたのストアドプロシージャにいくつかの繰り返しSQLコードを削減することができるだろうと思います。そしてそれはあなたのコードをモジュール化してきれいにするでしょう。

関連する問題