2016-04-15 59 views
2

挿入関数にインクリメンタル値を追加します。私は次のコードを試したが動作していない。毎回COLUMN1を1ずつ増やしたいと思います。 COLUMN1はキー列ではありません。SQL挿入関数(インクリメンタル値を挿入)

@var=0; 
INSERT INTO TABLE_A (COLUMN1,COLUMN2,COLUMN3,COLUMN4) 
     SELECT @var++,COLUMN6,COLUMN7,COLUMN8 
     FROM TABLE_B; 

答えて

2

によって増分だろういつでもそれは自動的に表示されます:

ます。また row_number()機能を使用することができます
INSERT INTO TABLE_A (COLUMN1,COLUMN2,COLUMN3,COLUMN4) 
SELECT 
    ROW_NUMBER() OVER(ORDER BY(SELECT NULL)) - 1, 
    COLUMN6, 
    COLUMN7, 
    COLUMN8 
FROM TABLE_B; 
+0

しかし、私はユニークな価値が欲しい! 2回目に挿入するとどうなりますか? – user2242558

+0

これはうまくいきません。代わりに 'IDENTITY'カラムを使用してください。 –

+0

あるいは、 '+(SELECT MAX(COLUMN1)FROM TABLE_B)'で '-1'を置き換えてください。しかし、これは同時クエリで問題が発生する可能性があります。 –

1

IDENTITYという列を作成することができます。だから今、あなたが挿入をしながらCOLUMN1を提供する必要はありません

ALTER TABLE (TABLE_A) ADD NewColumn INT IDENTITY(1,1) 

ALTER TABLE (TABLE_A) DROP COLUMN COLUMN1 

sp_rename 'TABLE_A.NewColumn', 'COLUMN1', 'COLUMN' 

をして、単に

INSERT INTO TABLE_A (COLUMN2,COLUMN3,COLUMN4) 
SELECT 
    COLUMN6, 
    COLUMN7, 
    COLUMN8 
FROM TABLE_B; 

のように実行します。それは既存の列であるなら、あなたはこのようにそれを追加することができます。あなたがCOLUMN1のためのシーケンシャル値を生成するためにROW_NUMBERを使用することができ、新しい行がテーブルに挿入され、それが1

+0

がSQL Server 2012で認識されないsp_rename function – user2242558

+0

@ user2242558: - SQL Server 2008として質問にタグを付けました。また、sp_renameもSQL Server 2012でも動作します。https://msdn.microsoft.com/en-in/ライブラリ/ ms188351(v = sql.110).aspx –

+0

間違って2008年を追加しました!そのことについて謝ります! – user2242558

0

このため。変数にrow_numberを追加します。

@var=0; 
INSERT INTO TABLE_A (COLUMN1,COLUMN2,COLUMN3,COLUMN4) 
     SELECT @var + row_number(),COLUMN6,COLUMN7,COLUMN8 
     FROM TABLE_B; 

ご希望の開始番号として、あなたの変数を初期化。私は携帯から投稿しています。

これが役に立ちます。

+0

ください。あなたの正解についての例を追加する –