2011-10-19 13 views
0

誰かが私にどのように表示されたらいいですかSQL Server 2008データベーステーブルで次の空き行番号を取得できますか?MS SQL 2008で次の行番号を取得する方法

私がしようとしているのは、Oracleと同様のものを実装して、シーケンス番号が新しい行の次の番号を指定するものです。インターネットを検索すると、これに一致するものは見つかりませんでしたが、私が見つけたのはrow_number()です。残念ながら、私はinsertステートメント内で動作させることはできません。

答えて

2

あなたが探しているのは、IDENTITY propertyの列です。これを使用すると、SQL Serverは行番号を呼び出しているものを自動的に割り当てることができます。 IDENTITYカラムとしてidを使用して

簡単な例:

DECLARE @MySampleTable TABLE (
    id INT IDENTITY(1,1) PRIMARY KEY, 
    name VARCHAR(20) 
); 

INSERT INTO @MySampleTable 
    (name) 
    VALUES ('Andy5'), ('Joe'); 

SELECT id, name 
    FROM @MySampleTable; 
0

は、あなたが本当に行番号をしたいですかあなただけのIDを探しています。

この場合、ID列とSQL Serverを探します。 http://www.dotnetfunda.com/articles/article753-identity-columns-in-sql-server.aspx

か:これらのケースではhttp://www.sqlteam.com/article/autonumbering-identity-columns

、あなたはIDとSQL Serverを指定していない、あなたのINSERT文では、自動的に新しいものを提供します。

Succes

+0

私の経験はOracleとMySQLであるため、あまりSQL Server 2008に詳しいことはありません。だから、私は助けを喜んでいる。私は両方の応答がIDENTIYについて話しているのを見ていますが、すでにint型と名前のデータ型を持つテーブルを持っているので、INSERT TABLE A VALUES(IDENTITY(1,1)、 'A'、 ' B '); ? – Andy5

0

テーブルを作成するときにIDフィールドを設定する必要があります。その後、そのフィールドに挿入すると、そのフィールドはスキップされます。インサートは、IDフィールドがtable1idと仮定した場合のようなものになります。

Insert table1 (field1,field2) 
values('test','test2') 

IDはいくつかの制限があります。アクションがロールバックされても数値が使用されますが、レコードが削除されても再利用されないため、ギャップが存在します。とにかくサロゲートIDがビジネス上の意味を持つべきではないので、それは重要ではありません。

+0

Entity Framework 4.0を使用してIDを設定することはできますか?エンティティフレームワークを通して作成されたテーブルがあります。 – Andy5

+0

私は誰もORMでテーブルを作成することは決してできません。それは貧弱なデータベース設計です。 – HLGEM

1
DECLARE @newId int; 
SET @newId = 0; 

select @newId = max(id) + 1 
from my_table; 

insert into my_table 
values(@newId, ...) 

... more code ... 

トランザクションで上記のコードをラップし、あなたが行ってもいいです。

関連する問題