¿Cómo puedo volver a sembrar una columna de identidad en una variable de tabla T-SQL?


Tengo una variable de tabla T-SQL (no una tabla) que tiene una columna de identidad de incremento automático. Quiero borrar todos los datos de esta variable y restablecer el valor de la columna de identidad a 1. ¿Cómo se puede hacer esto?

Author: Martin Smith, 2008-09-29

6 answers

Si está utilizando una variable de tabla, no puede hacerlo. Si fuera una tabla, podría truncarla o usar DBCC CHECKIDENT. Pero, si tiene para usar una variable de tabla, debe usar algo que no sea una columna de identidad. O, más exactamente, utilice la columna de identidad en la variable de la tabla, pero la salida utilizando ROWNUMBER:

DECLARE @t table (pkint int IDENTITY(1,1), somevalue nvarchar(50))
INSERT INTO @t (somevalue) VALUES( 'one')
INSERT INTO @t (somevalue) VALUES('twp')
INSERT INTO @t (somevalue) VALUES('three')
SELECT row_number() OVER (ORDER BY pkint), somevalue FROM @t
DELETE FROM @t
INSERT INTO @t (somevalue) VALUES('four')
SELECT row_number() OVER (ORDER BY pkint), somevalue FROM @t

Es lo mejor que puede hacer con la variable tabla.

 33
Author: Josef,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-29 02:57:12

Truncar la tabla volcará TODOS los datos y restablecerá la semilla de identidad.

De lo contrario, puede usar esta llamada para restablecer la identidad mientras conserva cualquiera de los datos:

DBCC CHECKIDENT (yourtableName, reseed, @NewStartSeedValue)
 34
Author: Stephen Wrighton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-08-14 11:23:35
    declare @tb table (recid int,lineof int identity(1,1))

    insert into @tb(recid)
    select recid from tabledata 

    delete from @tb where lineof>(select min(lineof) from @tb)+@maxlimit

Hice esto cuando quería usar un TOP y una variable al usar SQL 2000. Básicamente, agregas los registros y luego miras el mínimo. Tuve el mismo problema y noté este hilo. Eliminar la tabla no restablece la semilla, aunque imagino que usar GO debería eliminar la tabla y la variable para restablecer la semilla.

@maxlimit en la consulta anterior era obtener los 900 primeros de la consulta y dado que la variable de la tabla tendría una clave de identidad inicial diferente, esto resolvería ese tema.

Cualquier consulta posterior puede restar ese procedimiento derivado para que se inserte como "1", etc.

Espero que ayude.

Lauren

 0
Author: Lauren Glenn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-07 17:12:12

Sugiero que use dos variables de tabla. La @ Table1 tiene una semilla de identidad en la primera columna. @Table2 tiene la misma primera columna pero no tiene semilla de identidad.

A medida que recorre su proceso,

Insert into @Table2 from @Table1

Luego Borra De ambas Tablas como tus Bucles de Proceso.

En su primera pasada, la @Table2 tendrá un número secuencial en la primera fila a partir de 1.

La segunda vez a través del bucle, su segunda tabla podría tener números secuenciales en la primera columna que comienza en digamos 1081. Pero si selecciona el valor mínimo para una variable

(Select @FixSeed = min(RowID) From @Table2)

Entonces puedes actualizar @Table2 para hacer que RowID comience en 1 de la siguiente manera:

Update @Table2  Set  RowID = RowID - @FixSeed +1

Espero que esto ayude

 0
Author: Pavlo Carerra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-26 05:31:25

Si ha eliminado todas las filas de una tabla y desea restablecer el valor de la columna de identidad.

Utilice el comando DBCC CHECKIDENT.

DBCC CHECKIDENT(tblPerson, RESEED, 0)

Este comando restablecerá la columna identidad PersonId.

Otra cosa a tener en cuenta es que es posible que deba encerrar el nombre de la tabla entre comillas simples o entre corchetes si hace referencia a una ruta completa, o si el nombre de la tabla tiene espacios en ella.

DBCC CHECKIDENT ( ‘databasename.dbo.orders’,RESEED, 0)
 0
Author: Rae Lee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-28 05:07:23

Si necesita truncar la variable table en cada giro de un bucle while, puede poner la instrucción declare @myTbl (...) en el bucle. Esto recreará la tabla y restablecerá la columna de identidad en cada giro del bucle. Sin embargo, tiene un gran éxito de rendimiento. Tenía un bucle bastante apretado, y volver a declarar la variable de la tabla relativa a delete @myTbl fue varias veces más lento.

  • Dan
 -3
Author: user1017467,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-10-27 23:12:52