5

以下に示すようにクエリがあります column1 is int anothercolumn is varchar(100)

INSERT INTO TABLE1 (column1,column2)
SELECT (MAX(column1) FROM TABLE1)+1 ,anotherColumn FROM TABLE2

表1 クエリ前

column1  column2
-------  -------
3         test1
4         test2

Table1 クエリ後

column1  column2
-------  -------
3         test1
4         test2
5         anotherVal1
5         anotherVal2
5         anotherVal3

でも私はしたい

column1  column2
-------  -------
3         test1
4         test2
5         anotherVal1
6         anotherVal2
7         anotherVal3

SQLserver 2008 StoredProcedure でこれを達成するにはどうすればよいですか? クエリは反復され、各行の条件をチェックすると常に想定していました。しかし、集約関数は一度しか実行されないようです!

編集1

これにも答えてください SELECTステートメントを完了するだけで、INSERTが機能します。だから期待通りの結果が得られなかったのですか?私は正しいですか?

4

2 に答える 2

9

row_number関数を使用して、行に連続番号を付けます

insert into Table1 (column1,column2)
select 
    (select max(column1) from Table1) + row_number() over (order by T2.anotherColumn),
    T2.anotherColumn
from Table2 as T2

またはより安全なバージョン (Table1 に行がなくても機能します):

insert into Table1 (column1,column2)
select 
    isnull(T1.m, 0) + row_number() over (order by T2.anotherColumn),
    T2.anotherColumn
from Table2 as T2
    outer apply (select max(column) as m from Table1) as T1
于 2013-08-10T08:06:27.660 に答える
5

この質問はすでに回答されていることは知っていますが、解決策をさらに単純化することもできますか? どうですか

INSERT INTO TABLE1 (column1,column2)
SELECT ISNULL((SELECT MAX(column1) FROM TABLE1),0)
 +ROW_NUMBER() OVER (ORDER BY anotherColumn),
 anotherColumn FROM TABLE2
于 2013-08-10T10:33:26.100 に答える