DBCC CHECKIDENT (Transact-SQL)DBCC CHECKIDENT (Transact-SQL)

適用対象: ○SQL Server (2008 以降) ○Azure SQL Database ○Azure SQL Data Warehouse XParallel Data Warehouse APPLIES TO: yesSQL Server (starting with 2008) yesAzure SQL Database yesAzure SQL Data Warehouse noParallel Data Warehouse

指定された SQL Server 2017SQL Server 2017 のテーブルの現在の ID 値をチェックし、必要に応じて ID 値を変更します。Checks the current identity value for the specified table in SQL Server 2017SQL Server 2017 and, if it is needed, changes the identity value. ID 列の新しい現在の ID 値を手動で設定する場合に DBCC CHECKIDENT を使用することもできます。You can also use DBCC CHECKIDENT to manually set a new current identity value for the identity column.

トピック リンク アイコン Transact-SQL 構文表記規則Topic link icon Transact-SQL Syntax Conventions

構文Syntax


DBCC CHECKIDENT   
 (   
    table_name  
        [, { NORESEED | { RESEED [, new_reseed_value ] } } ]  
)  
[ WITH NO_INFOMSGS ]  

引数Arguments

table_nametable_name
現在の ID 値をチェックするテーブルの名前を指定します。Is the name of the table for which to check the current identity value. 指定されたテーブルには、ID 列が含まれている必要があります。The table specified must contain an identity column. テーブル名は、識別子の規則に従っている必要があります。Table names must comply with the rules for identifiers. 'Person.AddressType' や [Person.AddressType] など、2 つまたは 3 つの部分名を区切る必要があります。Two or three part names must be delimited, such as 'Person.AddressType' or [Person.AddressType].

NORESEEDNORESEED
現在の ID 値を変更しないように指定します。Specifies that the current identity value should not be changed.

RESEEDRESEED
現在の ID 値を変更するように指定します。Specifies that the current identity value should be changed.

new_reseed_valuenew_reseed_value
ID 列の現在値として使用する新しい値を指定します。Is the new value to use as the current value of the identity column.

WITH NO_INFOMSGSWITH NO_INFOMSGS
すべての情報メッセージを表示しないようにします。Suppresses all informational messages.

RemarksRemarks

現在の ID 値に加えられる個々の修正は、指定されているパラメーターによって異なります。The specific corrections made to the current identity value depend on the parameter specifications.

DBCC CHECKIDENT コマンドDBCC CHECKIDENT command 加えられる ID の修正Identity correction or corrections made
DBCC CHECKIDENT ( table_name, NORESEED )DBCC CHECKIDENT ( table_name, NORESEED ) 現在の ID 値はリセットされません。Current identity value is not reset. DBCC CHECKIDENT は、ID 列の現在の ID 値と現在の最大値を返します。DBCC CHECKIDENT returns the current identity value and the current maximum value of the identity column. 2 つの値が異なる場合は、エラーが発生しないよう、または連続値の一部が欠落しないように、ID 値をリセットする必要があります。If the two values are not the same, you should reset the identity value to avoid potential errors or gaps in the sequence of values.
DBCC CHECKIDENT ( table_name )DBCC CHECKIDENT ( table_name )

内の複数のor

DBCC CHECKIDENT ( table_name, RESEED )DBCC CHECKIDENT ( table_name, RESEED )
テーブルの現在の ID 値が、ID 列に格納されている最大の ID 値より小さい場合、テーブルの現在の ID 値は ID 列の最大値にリセットされます。If the current identity value for a table is less than the maximum identity value stored in the identity column, it is reset using the maximum value in the identity column. 後の「例外」のセクションを参照してください。See the 'Exceptions' section that follows.
DBCC CHECKIDENT ( table_name, RESEED, new_reseed_value )DBCC CHECKIDENT ( table_name, RESEED, new_reseed_value ) 現在の ID 値は new_reseed_value に設定されます。Current identity value is set to the new_reseed_value. テーブルが作成された後、そのテーブルに行が挿入されていない、または TRUNCATE TABLE ステートメントを使用してすべての行が削除された場合、DBCC CHECKIDENT を実行した後に挿入された最初の行が ID として new_reseed_value を使用します。If no rows have been inserted into the table since the table was created, or if all rows have been removed by using the TRUNCATE TABLE statement, the first row inserted after you run DBCC CHECKIDENT uses new_reseed_value as the identity.

行がテーブルに存在する場合、次の行が new_reseed_value で挿入されます。If rows are present in the table, the next row is inserted with the new_reseed_value value. バージョン SQL Server 2008 R2SQL Server 2008 R2 以前では、挿入された次の行で new_reseed_value + 現在のインクリメントの値を使用します。In version SQL Server 2008 R2SQL Server 2008 R2 and earlier, the next row inserted uses new_reseed_value + the current increment value.

テーブルが空でない場合、ID 値に ID 列の最大値より小さな値を設定すると、次の状況のいずれかが発生する可能性があります。If the table is not empty, setting the identity value to a number less than the maximum value in the identity column can result in one of the following conditions:

ID 列に PRIMARY KEY 制約または UNIQUE 制約が設定されている場合、生成される ID 値と既存の値との競合が原因で、テーブルに対する後続の挿入操作でエラー メッセージ 2627 が生成されます。-If a PRIMARY KEY or UNIQUE constraint exists on the identity column, error message 2627 will be generated on later insert operations into the table because the generated identity value will conflict with existing values.

PRIMARY KEY 制約または UNIQUE 制約が設定されていない場合、後続の挿入操作では重複した ID 値が挿入されます。-If a PRIMARY KEY or UNIQUE constraint does not exist, later insert operations will result in duplicate identity values.

例外Exceptions

次の表に、DBCC CHECKIDENT で現在の ID 値が自動的にリセットされないときの条件と、ID 値をリセットする方法を示します。The following table lists conditions when DBCC CHECKIDENT does not automatically reset the current identity value and provides methods for resetting the value.

条件Condition リセット方法Reset methods
現在の ID 値がテーブルの最大値より大きい。The current identity value is larger than the maximum value in the table. DBCC CHECKIDENT (table_name, NORESEED) を実行して列の現在の最大値を決定し、DBCC CHECKIDENT (table_name, RESEED,new_reseed_value) コマンドでその値を new_reseed_value として指定します。Execute DBCC CHECKIDENT (table_name, NORESEED) to determine the current maximum value in the column, and then specify that value as the new_reseed_value in a DBCC CHECKIDENT (table_name, RESEED,new_reseed_value) command.

-または--OR-

new_reseed_value を非常に低い値に設定して DBCC CHECKIDENT (table_name, RESEED,new_reseed_value) を実行してから DBCC CHECKIDENT (table_name, RESEED) を実行して値を修正します。Execute DBCC CHECKIDENT (table_name, RESEED,new_reseed_value) with new_reseed_value set to a very low value, and then run DBCC CHECKIDENT (table_name, RESEED) to correct the value.
すべての行がテーブルから削除されている。All rows are deleted from the table. new_reseed_value を希望の開始値に設定して DBCC CHECKIDENT (table_name, RESEED,new_reseed_value) を実行します。Execute DBCC CHECKIDENT (table_name, RESEED,new_reseed_value) with new_reseed_value set to the desired starting value.

シード値の変更Changing the Seed Value

シード値は、テーブルに読み込まれる最初の行の ID 列に挿入される値です。The seed value is the value inserted into an identity column for the very first row loaded into the table. 以降の行にはすべて、現在の ID 値 (テーブルまたはビューに対して生成された最後の ID 値) に増分値を加えた値が格納されます。All subsequent rows contain the current identity value plus the increment value where current identity value is the last identity value generated for the table or view.

DBCC CHECKIDENT を使用して、次のタスクを実行することはできません。You cannot use DBCC CHECKIDENT to perform the following tasks:

  • テーブルまたはビューの作成時に ID 列に指定された、元のシード値を変更する。Change the original seed value that was specified for an identity column when the table or view was created.

  • テーブルまたはビュー内の既存の行にシード値を再生成する。Reseed existing rows in a table or view.

    元のシード値を変更したり任意の既存の行にシード値を再生成したりするには、ID 列を削除し、新しいシード値を指定して作り直す必要があります。To change the original seed value and reseed any existing rows, you must drop the identity column and recreate it specifying the new seed value. テーブルにデータが含まれている場合、ID 番号が、指定のシード値および増分値を使用して既存の行に追加されます。When the table contains data, the identity numbers are added to the existing rows with the specified seed and increment values. 行の更新順序は保証されません。The order in which the rows are updated is not guaranteed.

結果セットResult Sets

ID 列を含むテーブルに対してオプションが指定されているかどうかにかかわらず、DBCC CHECKIDENT は、新しいシード値の指定以外のすべての操作に対して次のメッセージを返します。Whether or not any of the options are specified for a table that contains an identity column, DBCC CHECKIDENT returns the following message for all operations except when specifying a new seed value.

Checking identity information: current identity value '\<current identity value>', current column value '\<current column value>'. DBCC execution completed. If DBCC printed error messages, contact your system administrator.

RESEED new_reseed_value を使用して新しいシード値を指定する DBCC CHECKIDENT を使用する場合、次のメッセージが返されます。When DBCC CHECKIDENT is used to specify a new seed value by using RESEED new_reseed_value, the following message is returned.

Checking identity information: current identity value '\<current identity value>'. DBCC execution completed. If DBCC printed error messages, contact your system administrator.

アクセス許可Permissions

呼び出し元がテーブルを含むスキーマを所有しているか、sysadmin 固定サーバー ロール、db_owner 固定サーバー ロール、または db_ddladmin 固定サーバー ロールのメンバーである必要があります。Caller must own the schema that contains the table, or be a member of the sysadmin fixed server role, the db_owner fixed database role, or the db_ddladmin fixed database role.

使用例Examples

A.A. 必要に応じて現在の ID 値をリセットするResetting the current identity value, if it is needed

次の例では、必要に応じて、 AdventureWorks2012AdventureWorks2012 データベース内の指定されたテーブルの現在の ID 値をリセットします。The following example resets the current identity value, if it is needed, of the specified table in the AdventureWorks2012AdventureWorks2012 database.

USE AdventureWorks2012;  
GO  
DBCC CHECKIDENT ('Person.AddressType');  
GO  

B.B. 現在の ID 値を報告するReporting the current identity value

次の例では、 AdventureWorks2012AdventureWorks2012 データベース内の指定されたテーブルの現在の ID 値を報告します。ID 値が正しくない場合でも、ID 値の修正は行いません。The following example reports the current identity value in the specified table in the AdventureWorks2012AdventureWorks2012 database, and does not correct the identity value if it is incorrect.

USE AdventureWorks2012;   
GO  
DBCC CHECKIDENT ('Person.AddressType', NORESEED);   
GO  

C.C. 現在の ID 値を強制的に新しい値に設定するForcing the current identity value to a new value

次の例では、 AddressType テーブルの AddressTypeID 列の現在の ID 値を強制的に 10 に設定します。The following example forces the current identity value in the AddressTypeID column in the AddressType table to a value of 10. テーブルには既存の行があるため、次に挿入される行では値に 11 が使用されます。この値は、列の値に対して定義されている新しい現在の増分値に 1 を加えた値です。Because the table has existing rows, the next row inserted will use 11 as the value, that is, the new current increment value defined for the column value plus 1.

USE AdventureWorks2012;  
GO  
DBCC CHECKIDENT ('Person.AddressType', RESEED, 10);  
GO  

D.D. 空のテーブルの ID 値をリセットするResetting the identity value on an empty table

次の例では、テーブルのすべてのレコードを削除した後に、ErrorLog テーブルの ErrorLogID 列の現在の ID 値を強制的に 1 に設定します。The following example forces the current identity value in the ErrorLogID column in the ErrorLog table to a value of 1, after deleting all records from table. テーブルには既存の行がないため、次に挿入される行では値に 1 が使用されます。この値は、列について定義された増分値を加えない現在の ID 値です。Because the table has no existing rows, the next row inserted will use 1 as the value, that is, the new current identity value, without adding the increment value defined for the column.

USE AdventureWorks2012;  
GO  
TRUNCATE TABLE dbo.ErrorLog
GO
DBCC CHECKIDENT ('dbo.ErrorLog', RESEED, 1);  
GO  

参照See Also

ALTER TABLE (Transact-SQL)ALTER TABLE (Transact-SQL)
CREATE TABLE (Transact-SQL)CREATE TABLE (Transact-SQL)
DBCC (Transact-SQL)DBCC (Transact-SQL)
IDENTITY (Property) (Transact-SQL)IDENTITY (Property) (Transact-SQL)
ID 列のレプリケートReplicate Identity Columns
USE (Transact-SQL)USE (Transact-SQL)
IDENT_SEED (Transact-SQL)IDENT_SEED (Transact-SQL)
IDENT_INCR (Transact-SQL)IDENT_INCR (Transact-SQL)