4

私は困惑しています、

既存の MS SQL テーブル (すべてにデータがあります) のコレクション内の Identity 列の増分値を変更しようとしていますが、テーブルごとにカスタム スクリプトを記述せずに実行できるかどうかを調査しようとしています。
テーブルごとに異なる列リストがあるため、テーブルごとに異なるスクリプトが必要になるテーブルを削除して再作成する必要のない解決策が見つかりません。

たとえば、既存のテーブルを変更したい

CREATE TABLE [dbo].[ActionType](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [Action] [varchar](100) NOT NULL,
 CONSTRAINT [PK_ActionType] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
) ON [PRIMARY]
) ON [PRIMARY]

CREATE TABLE [dbo].[ActionType](
    [ID] [int] IDENTITY(1,5) NOT NULL,
    [Action] [varchar](100) NOT NULL,
 CONSTRAINT [PK_ActionType] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
) ON [PRIMARY]
) ON [PRIMARY]

のようなものを介して

exec sp_AlterIncrement @TABLE_NAME = 'ActionType', @NEW_ICREMENT = 5

データを保持しながら。

これにより、私が現在直面している大きな展開の問題が修正されるので、助けていただければ幸いです

4

6 に答える 6

3

作成後に ID の増分を変更することはできません。DBCC Chekident でシード値を変更するだけでかまいません。列を削除して再作成する必要があります。

于 2013-10-16T13:03:49.940 に答える
1

以前は小さなテーブルでそれをしなければなりませんでしたが、それはかなり簡単です。トリックは、現在キーとして存在しないものに更新してから元に戻す必要があることです.1ずつインクリメントすることはできませんそのキーはすでに存在するためです。たとえば、ID が 100 より小さいテーブルの場合、2 回の更新が必要です。

update my_table set id = id+100;
update my_table set id = id-99;
于 2013-10-16T04:25:32.363 に答える
0

しかし、とにかく、ID 値を変更する理由がわかりません。とにかく、主キーまたはクラスター化されたキーの一部と同じままにするためです。

また、列タイプの変更が必要な場合、テーブル構造を変更しない限り可能性はないと思います。

テーブルの変更 ActionType 列 ID の変更

不要な場合は、元の構造に戻すこともできます。これは、オンデマンドで必要な場合と同様に、指定されたケースにも使用できます。

さらにフィードバックを提供できるように提案してください。

于 2013-10-16T04:38:20.027 に答える
0

いくつかのこと、おそらく情報が多すぎるかもしれませんが、このようなことをするときに役立ちます. 以下は、インクリメントをあなたが望むものに設定します:

DBCC CHECKIDENT ([DB.Schema.Table], reseed, 0) --First record will have a 1. You can set it to any value

ID を持つテーブルにデータを挿入したいが、値を特定のものに強制する必要がある場合は、次のようにします。

SET IDENTITY_INSERT [DB].[schema].[Table] ON

...Add your data here

SET IDENTITY_INSERT [DB].[schema].[Table] OFF
于 2013-10-16T19:35:27.097 に答える
0

Identity フィールドを再列挙または圧縮する必要がある場合、最も簡単な方法は次のとおりです。

一時的に、ID フィールドを整数に変換します。たとえば、Excel シートを使用して値を置き換えて入力します。Excel ファイルの列をコピーして Int フィールドに貼り付けます。テーブルを保存します デザイン モードで再度開き、Int フィールドを ID に戻します

この ID フィールドが子テーブルで使用されている場合は、新しい値を従属テーブルにもエクスポートするトリガーがあることを確認してください。

それだけです。

アプリケーションで Identity データを制御する必要がある場合は、それを Int に変更し、Dmax 関数を使用したコードで増分値を管理します。

それが役に立てば幸い

于 2017-09-16T23:51:50.890 に答える