37

自動インクリメント ID 列を持つ T-SQLテーブル変数(テーブルではない) があります。この変数からすべてのデータを消去し、ID 列の値を 1 にリセットしたいのですが、どうすればよいですか?

4

5 に答える 5

38

テーブル変数を使用している場合、それはできません。テーブルの場合は、切り捨てるか、DBCC CHECKIDENT. ただし、テーブル変数を使用する必要ある場合は、ID 列以外のものを使用する必要があります。または、より正確には、テーブル変数で ID 列を使用しますが、次を使用して出力しますROWNUMBER

DECLARE @t table (pkint int IDENTITY(1,1), somevalue nvarchar(50))
INSERT INTO @t (somevalue) VALUES( 'one')
INSERT INTO @t (somevalue) VALUES('twp')
INSERT INTO @t (somevalue) VALUES('three')
SELECT row_number() OVER (ORDER BY pkint), somevalue FROM @t
DELETE FROM @t
INSERT INTO @t (somevalue) VALUES('four')
SELECT row_number() OVER (ORDER BY pkint), somevalue FROM @t

テーブル変数でできる最善の方法です。

于 2008-09-29T02:57:12.820 に答える
29

テーブルを切り捨てると、すべてのデータがダンプされ、ID シードがリセットされます。

それ以外の場合は、この呼び出しを使用して、データを保持しながら ID をリセットできます。

DBCC CHECKIDENT (yourtableName, reseed, @NewStartSeedValue)
于 2008-09-29T01:37:46.023 に答える
1

2 つのテーブル変数を使用することをお勧めします。@Table1 には、最初の列に ID シードがあります。@Table2 には同じ最初の列がありますが、ID シードはありません。

プロセスをループすると、

Insert into @Table2 from @Table1

次に、プロセスループとして両方のテーブルから削除します。

最初のパスでは、@Table2 の最初の行に 1 から始まる連番があります。

2 回目のループでは、2 番目のテーブルの最初の列に、たとえば 1081 から始まる連番が含まれる場合があります。ただし、変数に最小値を選択すると、

(Select @FixSeed = min(RowID) From @Table2)

次に、次のように @Table2 を更新して、RowID を 1 から開始することができます。

Update @Table2  Set  RowID = RowID - @FixSeed +1

お役に立てれば

于 2015-01-26T04:58:12.267 に答える
0
    declare @tb table (recid int,lineof int identity(1,1))

    insert into @tb(recid)
    select recid from tabledata 

    delete from @tb where lineof>(select min(lineof) from @tb)+@maxlimit

これは、SQL 2000 を使用するときに TOP と変数を使用したかったときに行いました。基本的には、レコードを追加してから、最小のレコードを調べます。私は同じ問題を抱えていて、このスレッドに気づきました。テーブルを削除してもシードはリセットされませんが、GO を使用するとテーブルと変数を削除してシードをリセットする必要があると思います。

上記のクエリの @maxlimit は、クエリの上位 900 を取得することでした。テーブル変数の開始 ID キーが異なるため、これで問題が解決します。

後続のクエリでは、その派生プロシージャを減算して、「1」などとして挿入することができます。

于 2014-07-07T17:02:22.973 に答える
-3

while ループの各ターンでテーブル変数を切り捨てる必要がある場合は、declare @myTbl (...)ステートメントをループに入れることができます。これにより、テーブルが再作成され、ループの各ターンで ID 列がリセットされます。ただし、パフォーマンスに大きな影響があります。私はかなりタイトなループを持っていて、相対的にテーブル変数を再宣言するとdelete @myTbl数倍遅くなりました。

  • ダン
于 2011-10-27T23:12:52.523 に答える