3

insert select from を使用して、1 つのクエリを使用して複数のレコードをコピーしようとしています。

Insert into tab_A(colId, col1, col2, col3)
Select colId, col1, col2, col3  form tab_A
Where colId in ( 2,4,6)

新しいエントリに別の colId を割り当てることは可能ですか? たとえば、colid 2 は 23 に、4 は 24 に、6 は 25 に置き換える必要があります。単一のクエリでそれを実現するにはどうすればよいですか?

4

5 に答える 5

3

これはうまくいくでしょう

Insert into tab_A(colId, col1, col2, col3)
Select 23 , col1, col2, col3  form tab_A Where colId = 2 UNION ALL
Select 24 , col1, col2, col3  form tab_A Where colId = 4 UNION ALL
Select 25 , col1, col2, col3  form tab_A Where colId = 6 

さらに情報を提供していただければ、より再利用可能なものを提供できます。ID 列にする必要がcolIdありますか?


編集

これは、この非常に特殊なケースで機能します

Insert into tab_A(colId, col1, col2, col3)
Select ((colId - 4) * (-1)) + colId + 20 , col1, col2, col3  
    form tab_A Where colId IN (2, 4, 6)

関数newId = ((oldId - 4) * (-1)) + oldId + 20は明らかに、記載されている問題に固有のものです。


EDIT2

このようなものは、より一般的なアプローチが適切であると思われます。

DECLARE @MaxColID INT

BEGIN TRANSACTION

SELECT @MaxColID = MAX(ColID) FROM tab_A

INSERT tab_A(colId, col1, col2, col3)
SELECT row + @MaxColID, col1, col2, col3
    FROM
    (
        SELECT ROW_NUMBER() OVER (ORDER BY ColID) row, col1, col2, col3
        FROM tab_A WHERE colID IN (2, 4, 6)
    )

COMMIT

編集3

EDIT 2が実際に必要なものであると思われる場合は、実際に列を作成ColIDしたいIDENTITY場合は、これを行うことができます。

INSERT tab_A (col1, col2, col3)
SELECT col1, col2, col3  FROM tab_A WHERE colId IN (2, 4, 6)
于 2012-07-05T08:24:19.980 に答える
0

クエリに col4 または col6 が表示されませんが、これはあなたが望むものですか:

Insert into tab_A(colId, col1, col2, col3)
Select colId, col1, 23, col3  form tab_A
Where colId in ( 2,4,6)
于 2012-07-05T08:24:26.607 に答える
0

いくつかのオプションがあります:

新しい ID 列を元のテーブルに追加し、この挿入を行う前に新しい値を入力して、古い ID 列ではなく新しい ID 列を選択します。これは私が考える最もきちんとした解決策です。

代替 - ルールに基づいて挿入の ID 値を変更します。

INSERT INTO tab_A(colID, col1, col2, col3)
SELECT colId + 20, col1, col2, col3
FROM tab_A
WHERE colID IN(2,4,6)

最後の手段 - 挿入をカーソルで順番に処理し、毎回 ID 値を変更します。

于 2012-07-05T08:45:21.793 に答える
0

望ましい差を追加しようとしましたかcolId- あなたの場合、2 を 23 で置き換える必要があるため、差は 21 です。

Insert into tab_A(colId, col1, col2, col3) 
Select colId+21, col1, col2, col3 
form tab_A Where colId in ( 2,4,6) 

:あなたのケースでは違いが一貫していないという部分を見逃しました。提案されたソリューションは、差が同じ場合にのみ機能します

于 2012-07-05T08:43:00.780 に答える