1

SQLのテーブルの現在の自動増分値から自動増分値を再シードしようとしています。私は次のようなことをしました

USE [MyDatabase]
GO

SELECT IDENT_CURRENT('MyTable') AS Current_Identity
DBCC CHECKIDENT (MyTable, reseed, Current_Identity)

次のエラーが発生します。

(1 row(s) affected)
Msg 2560, Level 16, State 9, Line 3
Parameter 3 is incorrect for this DBCC statement.

何がうまくいかないのですか?

4

2 に答える 2

3

IDENT_CURRENTSQL Serverでは、次のように値を変数に保存できます。

DECLARE @currentIdentity INT;
SELECT @currentIdentity = IDENT_CURRENT('MyTable');
DBCC CHECKIDENT (MyTable, reseed, @currentIdentity);

あなたの質問に答えるために、あなたの問題は、Current_Identityが列のエイリアスであるが、それをどこにも保存しなかったことです。これは、次に行う呼び出しがDBCC CHECKIDENT前のクエリの列を参照できないことを意味します。

于 2012-09-06T19:37:56.507 に答える
0

レコードが含まれていないテーブルで次のコードを実行すると、次のエラーが発生します。

このDBCCステートメントのパラメーター3が正しくありません

DECLARE @max_id INT
SELECT @max_id = MAX(ID)+1 FROM testt; 
DBCC CHECKIDENT('Tablename',RESEED,@max_id);

その理由は@max_id、この場合はNULLであり、渡すことができないためです。

これが私がすることです。返された値をチェックして、NULLでないことを確認します。お役に立てれば

DECLARE @max_id INT, @var int
SELECT @max_id = MAX(ID)+1 FROM TABLENAME; 
IF @max_id IS NULL 
BEGIN
SELECT@var = 1 
END
ELSE
BEGIN 
SELECT @var = @max_id
END
DBCC CHECKIDENT('TABLENAME,RESEED,@var);
于 2016-07-18T15:13:45.733 に答える