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

適用対象:○SQL Server (2008 以降)○Azure SQL Database×Azure SQL Data Warehouse ×Parallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)yesAzure SQL DatabasenoAzure 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.

解説Remarks

現在の 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_nameNORESEED)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 を実行した後に挿入された最初の行を使用して場合new_reseed_value id として。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 制約が存在する場合エラー メッセージ 2627 が生成されますテーブルへの後続の挿入操作で生成される id 値が既存の値と競合するためです。-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) の列で、現在の最大値を確認し、その値としてを指定、 new_reseed_value DBCC checkident (table _名前、RESEED,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-

DBCC checkident (table_name、RESEED,new_reseed_value) と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. DBCC checkident (table_name、RESEED,new_reseed_value) と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.

再シードを使用して新しいシード値を指定して DBCC CHECKIDENT を使用する場合new_reseed_value、次のメッセージが返されます。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.

PermissionsPermissions

呼び出し元のテーブルを含むスキーマを所有またはのメンバーである必要があります、 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

次の例は、指定されたテーブルでの必要な場合に現在の id 値をリセット、 AdventureWorks2012AdventureWorks2012データベース。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

次の例では、現在の id 値を強制する、AddressTypeID内の列、AddressTypeテーブル 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  

参照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 & #40 です。TRANSACT-SQL と #41 です。IDENT_SEED (Transact-SQL)
IDENT_INCR & #40 です。TRANSACT-SQL と #41 です。IDENT_INCR (Transact-SQL)