2012-09-06 24 views
1

我正嘗試從SQL中當前表的自動增量值中重新設置自動增量值。 我不喜歡的東西從當前值重新執行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. 

任何想法去什麼錯?

+1

你確定這是'MySQL'嗎?看起來很像MSSQL。 – Kermit

回答

3

在SQL Server中,你可以保存IDENT_CURRENT值的變量,就像這樣:

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

要回答你的問題,你的問題是,Current_Identity是一個別名爲列,但您沒有保存它隨處可見。這意味着您對DBCC CHECKIDENT的下一次調用無法引用上一個查詢中的列。

0

如果運行在表上從未在它有一個記錄下面的代碼,你會出現以下錯誤:

Parameter 3 is incorrect for this DBCC statement

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 
[email protected] = 1 
END 
ELSE 
BEGIN 
SELECT @var = @max_id 
END 
DBCC CHECKIDENT('TABLENAME,RESEED,@var); 
+0

你能格式化你的代碼嗎? –