2017-12-23 12 views
1

asp.netアプリケーションに列「転送番号」を含むページバンク転送があります。これは自動生成された列です。私は、クエリに基づいて基づいて、この値を取っています:2回のユーザーログインが、それはこのページに同じ転送数を示していたときにプライマリキー列の自動インクリメント

IF (SELECT COUNT(1) FROM tableName) = 0 
    SELECT IDENT_CURRENT('tableName') 
ELSE 
    SELECT IDENT_CURRENT('tableName') + 1 

問題があります。レコードを挿入する前に、異なるユーザーに異なる転送番号を表示するにはどうすればよいですか?

ありがとうございました。

答えて

1

列をIDとして設定し、値が自動的に生成され、挿入後に変数@@ identityから挿入されたIDを取得できます。この

テーブルデザイン

CREATE TABLE YourTable 
(
SeqNo INT IDENTITY(1,1) PRIMARY KEY, 
Col1 VARCHAR(50), 
Col2 INT, 
... 
) 

のように私は、アイデンティティや主キーとして列SEQNOを設定しています。

Identity(1,1)は、最初の値が1であることを意味し、次に各行に対してインクリメントは+1となります。

今、私は私が実行した場合のIDフィールドの値が1

あるよう

INSERT INTO YourTable(Col1,Col2) 
values('abc',1) 

select @@identity 

今すぐ挿入した後、第二選択は私に値1が返されますテーブルにレコードを挿入この1つのより多くの時間が、私は2を取得しますように

また、代わりに@@ IDENTITYに(関与している場合トリガーで)システム定義関数SCOPE_IDENTITY()を呼び出すことができます

値はデータベース自体によって生成されるので、これを使用して競合を避けることができます

+1

トリガーが含まれている場合に備えて@@ IDENTITYの代わりにSCOPE_IDENTITY()を使用する方がよい。 –

+0

@DanGuzman回答にあなたのコメントを追加しました。ありがとう:) –

関連する問題