SQLで整数列の値を1ずつインクリメントする方法


91

私の質問は

列の値を1インクリメントする方法。

たとえば、列のID値が1、2、3、4 、.であるとします。

このテーブルを更新すると、ID列が1ずつ増加するはずです。

これでID2、3、4、5 、.になります。


あなたについてのサンプルはありますか?1行に対して列の値を1ずつインクリメントしますか?すべての行?あなたのテーブル(DDL)はどれですか?データサンプル(DML)?
Kiquenet 2016

回答:


154

テーブル内のすべての値に1を追加するには...

UPDATE myTable
SET ID = ID + 1

以前の最高値(通常)より1つ多い新しい値を作成するには、IDENTITYの列を使用します


39
列がNULLの場合、これは機能しないことに注意してください。NULL列は、インクリメントした後でもNULLのままです。これを解決するには、次のようなISNULLステートメントを使用します:(このSOの回答UPDATE myTable SET ID = ISNULL(ID, 0) + 1から
取得

SET [Lic] = [Lic] + @dif。注@dif可変とすることができる正、0、または負
Kiquenet

42

行ごとに一意の番号を自動的に生成する場合、これはNeilの回答によるIDENTITYです。

テーブルを更新するたびに値を増やしたい場合(つまり、キーではない場合):

Update MyTable
Set IDColumn = IDColumn + 1
Where <whatever>


1

あなたはあなたのためにIDENTITYこれをするだろうを使うことができます。

CREATE TABLE [dbo].[MyTable](
    [MyTableID] [int] IDENTITY(1,1) NOT NULL,
    -- Other columns
)

最初のレコードを挿入すると、1が得られますId


1

Oracleでは、コードはもう少しトリッキーです。

シーケンスオブジェクトを使用して自動インクリメントフィールドを作成する必要があります(このオブジェクトは数列を生成します)。

次のCREATESEQUENCE構文を使用します。

CREATE SEQUENCE seq_person
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 10

上記のコードは、1から始まり、1ずつ増加するseq_personというシーケンスオブジェクトを作成します。また、パフォーマンスのために最大10個の値をキャッシュします。キャッシュオプションは、アクセスを高速化するためにメモリに保存されるシーケンス値の数を指定します。

「Persons」テーブルに新しいレコードを挿入するには、nextval関数を使用する必要があります(この関数はseq_personシーケンスから次の値を取得します)。

INSERT INTO Persons (ID,FirstName,LastName)
VALUES (seq_person.nextval,'Lars','Monsen')

上記のSQLステートメントは、「Persons」テーブルに新しいレコードを挿入します。「ID」列には、seq_personシーケンスの次の番号が割り当てられます。「FirstName」列は「Lars」に設定され、「LastName」列は「Monsen」に設定されます。


1

次のことを試すことができます。

DECLARE @i INT
SET @i = @@ROWCOUNT + 1

INSERT INTO YourTable
        (Identity Column)    
VALUES    
        (@i + 1)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.