variable sql-server tsql table-variable

sql-server - variable - identity sql server



¿Cómo puedo resembrar una columna de identidad en una variable de tabla T-SQL? (6)

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 cuando uso 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 me imagino que con GO debería soltar la tabla y la variable para restablecer la semilla.

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

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

Espero eso ayude.

Lauren

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?


Si está usando una variable de tabla, no puede hacerlo. Si fuera una tabla, podría DBCC CHECKIDENT o usar DBCC CHECKIDENT . Pero, si tiene que usar una variable de tabla, debe usar algo que no sea una columna de identidad. O, para ser más exactos, use la columna de identidad en su variable de tabla, pero ROWNUMBER usando 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 puedes hacer con la variable de tabla.


Si necesita truncar la variable de la tabla en cada vuelta de un ciclo while, puede poner la declare @myTbl (...) en el ciclo. Esto recreará la tabla y restablecerá la columna de identidad en cada vuelta del ciclo. Sin embargo, tiene un gran golpe de rendimiento. Tenía un ciclo bastante cerrado, y redeclar la variable de la tabla relativa a delete @myTbl fue varias veces más lento.

  • Dan

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

De lo contrario, puede usar esta llamada para restablecer la identidad sin perder ninguno de los datos:

DBCC CHECKIDENT (yourtableName, reseed, @NewStartSeedValue)


Sugiero que uses dos variables de tabla. El @ Table1 tiene una semilla de identidad en la primera columna. @ Table2 tiene la misma primera columna pero no contiene ninguna semilla de identidad.

Mientras recorre su proceso,

Insert into @Table2 from @Table1

a continuación, elimine de ambas tablas como sus bucles de proceso.

En su primer pase, @ Table2 tendrá un número secuencial en la primera fila que comienza en 1.

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

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

Luego puede actualizar @ Table2 para hacer que RowID comience en 1 de la siguiente manera:

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

Espero que esto ayude


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

USe DBCC CHECKIDENT comando.

DBCC CHECKIDENT(tblPerson, RESEED, 0)

Este comando restablecerá la columna de identidad de PersonId.

Otra cosa a tener en cuenta es que puede necesitar incluir el nombre de la tabla en comillas simples o corchetes si hace referencia por una ruta completa, o si el nombre de la tabla tiene espacios en ella.

DBCC CHECKIDENT ( ‘databasename.dbo.orders’,RESEED, 0)