2011-02-05 22 views
0

SQL Serverを使用して自動インクリメント問題

表1

私は、各列

しようとしたクエリ

insert into table2 
    select * from table1 

の予想される出力のためのアイデンティティを新しいテーブルを作成して確認する必要があり

ID Name 

001 Raja 
002 Ravi 
003 Suresh 
004 Kamal 
... 

S.No ID Name 

1 001 Raja 
2 002 Ravi 
3 003 Suresh 
4 004 Kamal 
... 

私は新しいテーブルを作成し、S.No列をテーブル内の同一性にしました。それは、各行のID番号を作成している、私は再び挿入されたすべての行を削除しますが、IDは最終行の次の番号以降から作成されます。

S.No ID Name 

    1 001 Raja 
    2 002 Ravi 
    3 003 Suresh 
    4 004 Kamal 
    ... 

すべての行を削除し、再度、私は挿入。私はテーブルからすべての行を削除していたときに

S.No ID Name 

    5 001 Raja 
    6 002 Ravi 
    7 003 Suresh 
    8 004 Kamal 
    ... 

の予想される出力

アイデンティティ以降数1から開始する必要があります。

質問するhelp

答えて

4

これは身分証明の仕組みではありません。物を削除してもIDフィールドはリセットされません。

DBCC CHECKIDENT (‘databasename.dbo.yourtable’,RESEED, 0) -- will start from 1 
+0

おかげで、。現在、私はtable2から削除*を書いていますので、ここであなたの言及したクエリを挿入できます。 – Gopal

+0

@Gopal:** 2つのステートメント**を含むクエリを持つ必要があります - 最初に 'delete * from table2'と次の' DBCC CHECKIDENT(.....、RESEED、0) ' - 他 –

+0

@marc_sはい、そうです。私はリプシの部分がもっと難しいと思ったので、私はそれについて言及しました。 – alex

2

テーブルを切り捨てるだけですか?プライマリキーもリセットされます。
(marc_s:実際には、それはそれはリセットだとIDENTITY値です)

TRUNCATE TABLE tablename 
+0

テーブルを切り捨てると、テーブルのデータやテーブルが削除されます。 – Gopal

+0

テーブルではなく、データだけですが、それはあなたが望むものですか?データを削除して自動インクリメントカウンタをリセットしますか? – Marc

+0

TRUNCATEは本当に "プライマリキーをリセットしていません" - IDENTITYカウンタがリセットされています - 投稿に明確なコメントを追加しました –

0

したい場合はS.No列が自動インクリメントを持っており、それが値です(最大無し+ 1)が、

ので、その値を見つけてDefaultValue列をこの関数に設定し、を偽に設定するスカラー関数を作成することができます。

見て、このサンプル:あなたの言及したクエリと削除書くためにどのようにあなたの応答のための

CREATE FUNCTION [dbo].[getmaxno]() 
RETURNS int 
AS 
BEGIN 
    DECLARE @ResultVar int 
    SELECT @ResultVar = MAX(no)+1 from dbo.table_1 
    RETURN @ResultVar 
END 

ALTER TABLE [dbo].[Table_1] ADD CONSTRAINT [DF_Table_1_no] DEFAULT ([dbo].[getmaxno]()) FOR [no] 
関連する問題