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

適用対象: yesSQL Server yesAzure SQL Database yesAzure Synapse Analytics (SQL DW) noParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

指定された SQL ServerSQL Server のテーブルの現在の ID 値をチェックし、必要に応じて ID 値を変更します。Checks the current identity value for the specified table in SQL ServerSQL Server and, if it's 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 構文表記規則Article link icon Transact-SQL Syntax Conventions

構文Syntax


-- Syntax for SQL Server and Azure SQL Database  

DBCC CHECKIDENT
 (
    table_name  
        [, { NORESEED | { RESEED [, new_reseed_value ] } } ]  
)  
[ WITH NO_INFOMSGS ]  
-- Syntax for Azure SQL Data Warehouse
DBCC CHECKIDENT   
 (   
    table_name  
        [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 follow 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 shouldn't 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. テーブルに行が存在する場合、または DELETE ステートメントを使用してすべての行が削除された場合は、挿入される次の行に new_reseed_value + 現在の増分の値が使用されます。If rows are present in the table, or if all rows have been removed by using the DELETE statement, the next row inserted uses new_reseed_value + the current increment value. トランザクションによって行が挿入され、後でそのトランザクションがロールバックされた場合、挿入される次の行では、new_reseed_value + 現在の増分の値が、行が削除されたかのように使用されます。If a transaction inserts a row and is later rolled back, the next row inserted uses new_reseed_value + the current increment value as if the row had been deleted. テーブルが空でない場合、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 doesn't 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) を実行して、列の現在の最大値を判断します。Execute DBCC CHECKIDENT (table_name, NORESEED) to determine the current maximum value in the column. 次に、DBCC CHECKIDENT (table_name, RESEED,new_reseed_value) コマンドで値を new_reseed_value に指定します。Next, 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 new starting value.

シード値の変更Changing the Seed Value

シード値は、テーブルに読み込まれる最初の行の ID 列に挿入される値です。The seed value is the value inserted into an identity column for the 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 can't use DBCC CHECKIDENT for the following tasks:

  • テーブルまたはビューの作成時に ID 列に指定された、元のシード値を変更する。Change the original seed value 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, 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 isn't guaranteed.

結果セットResult Sets

ID 列を含むテーブルに対してオプションを指定するかどうかにかかわらず、DBCC CHECKIDENT は、ある操作以外のすべての操作に対して次のメッセージを返します。Whether or not you specify any options for a table that contains an identity column, DBCC CHECKIDENT returns the following message for all operations except one. それは、新しいシード値を指定する操作です。That operation is 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.

Azure SQL Data Warehouse には db_owner アクセス許可が必要です。Azure SQL Data Warehouse requires db_owner permissions.

使用例Examples

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

次の例では、必要に応じて、AdventureWorks2012AdventureWorks2012 データベース内の指定されたテーブルの現在の ID 値をリセットします。The following example resets the current identity value, if it's 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 doesn't correct the identity value if it's 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 が使用されます。列に定義された新しい現在の ID 値に 1 (列の増分値) を加えた値です。Because the table has existing rows, the next row inserted will use 11 as the value – the new current identity value defined for the column plus 1 (which is the column's increment value).

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)