DBCC CHECKIDENT Sets Identity to 0

前端 未结 10 1336
长发绾君心
长发绾君心 2020-12-07 21:55

I\'m using this code to reset the identity on a table:

DBCC CHECKIDENT(\'TableName\', RESEED, 0)

This works fine most of the time, with the f

10条回答
  •  猫巷女王i
    2020-12-07 22:17

    I have used this in SQL to set IDENTITY to a particular value:-

    DECLARE @ID int = 42;
    DECLARE @TABLENAME  varchar(50) = 'tablename'
    
    DECLARE @SQL nvarchar(1000) = 'IF EXISTS (SELECT * FROM sys.identity_columns WHERE OBJECT_NAME(OBJECT_ID) = '''+@TABLENAME+''' AND last_value IS NOT NULL)
        BEGIN
            DBCC CHECKIDENT('+@TABLENAME+', RESEED,' + CONVERT(VARCHAR(10),@ID-1)+');
        END
        ELSE
        BEGIN
            DBCC CHECKIDENT('+@TABLENAME+', RESEED,' + CONVERT(VARCHAR(10),@ID)+');
        END';
    EXEC (@SQL);
    

    And this in C# to set a particular value:-

    SetIdentity(context, "tablename", 42);
    .
    .
    private static void SetIdentity(DbContext context, string table,int id)
    {
        string str = "IF EXISTS (SELECT * FROM sys.identity_columns WHERE OBJECT_NAME(OBJECT_ID) = '" + table
            + "' AND last_value IS NOT NULL)\nBEGIN\n";
        str += "DBCC CHECKIDENT('" + table + "', RESEED," + (id - 1).ToString() + ");\n";
        str += "END\nELSE\nBEGIN\n";
        str += "DBCC CHECKIDENT('" + table + "', RESEED," + (id).ToString() + ");\n";
        str += "END\n";
        context.Database.ExecuteSqlCommand(str);
    }
    

    This builds on the above answers and always makes sure the next value is 42 (in this case).

提交回复
热议问题