Tengo una variable de tabla de T-SQL (no es 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?¿Cómo puedo resembrar una columna de identidad en una variable de tabla T-SQL?
Respuesta
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 salida de mesa, pero 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 de tabla.
Truncar la tabla arrojará TODOS los datos y restablecerá la semilla de identidad.
De lo contrario, puede utilizar esta llamada para restablecer la identidad al tiempo que conserva alguno de los datos:
DBCC CHECKIDENT (yourtableName, reseed, @NewStartSeedValue)
Si necesita truncar la variable de tabla en cada vuelta de un ciclo while, puede poner la instrucción 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
No. Esto no funciona –
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)[email protected]
lo hice cuando quería utilizar una parte superior y una variable cuando se utiliza SQL 2000. Básicamente, se agrega en los registros y luego mira a la mínima. 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.
la búsqueda se puede restar ese procedimiento derivado para que sea insertar como "1", etc.
espero que ayude.
Lauren
Le sugiero que utilice 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.
Cuando recorre su proceso,
Insert into @Table2 from @Table1
a continuación, eliminar de ambas tablas como su proceso de bucles.
En su primera pasada, la Tabla 2 @ tendrá aa número secuencial en la primera fila a partir de 1.
La segunda vez a través del bucle de la segunda tabla puede tener números secuenciales en la primera columna a partir de por ejemplo 1081 .Sin embargo, si se selecciona el valor mínimo de una variable
(Select @FixSeed = min(RowID) From @Table2)
A continuación, puede actualizar @ Tabla 2 para hacer ROWID comenzará a las 1 de la siguiente manera:
Update @Table2 Set RowID = RowID - @FixSeed +1
Esperanza esto ayuda
Si ha eliminado todas las filas en 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 encerrar el nombre de la tabla entre comillas simples o corchetes si está haciendo referencia por una ruta completa, o si el nombre de la tabla tiene espacios.
DBCC CHECKIDENT (‘databasename.dbo.orders’,RESEED, 0)
- 1. Eliminar identidad de una columna en una tabla
- 2. Cómo crear una tabla con la columna de identidad
- 3. Cómo resembrar/reemplazar columnas de identidad en datos existentes
- 4. inserción de identidad tsql sin lista de nombres de columna
- 5. ¿Cómo puedo determinar si una columna es una columna de identidad en MSSQL 2000?
- 6. Agregar una identidad a una columna existente
- 7. En PostgreSQL, ¿cómo se inserta en una tabla con una sola columna de identidad?
- 8. ¿Cómo resembrar una columna de incremento automático en una base de datos SQLite?
- 9. Cómo insertar en una tabla con solo una columna de IDENTIDAD (SQL Express)
- 10. ¿Cómo agregar una nueva columna de identidad a una tabla en SQL Server?
- 11. SQLSERVER: ¿Cómo modificar una tabla existente int clave primaria para convertirse en una columna de identidad?
- 12. TSQL: actualizar una columna como null
- 13. Servidor SQL cómo quitar la identidad de una columna
- 14. ¿Cómo se agrega una columna calculada a una tabla?
- 15. TSQL, contando pares de valores en una tabla
- 16. Cómo actualizar datos de una columna usando otra tabla de datos TSQL
- 17. Cómo identificar si la tabla tiene columna de identidad
- 18. Servidor SQL: ¿cómo agregar una nueva columna de identidad y llenar una columna con identificadores?
- 19. TSQL: ¿cómo ejecutar una consulta como una variable?
- 20. ¿Cómo puedo agregar una columna a una tabla existente?
- 21. ¿Cómo se puede saber qué será la próxima columna de identidad?
- 22. Cómo agregar una columna de identidad a tabla de datos usando C#
- 23. En WPF, ¿cómo puedo vincular una columna de cuadrícula de datos a una columna específica de una tabla de datos?
- 24. ¿Hay alguna forma de recorrer una variable de tabla en TSQL sin usar un cursor?
- 25. TSQL escritura en una tabla temporal de SQL dinámico
- 26. ¿Cómo creo condicionalmente una tabla en Sybase (TSQL)?
- 27. columna de identidad en el servidor Sql
- 28. Obtener el valor máximo para la columna de identidad sin una exploración de tabla
- 29. Cómo subscribir una columna de tabla MySQL
- 30. ¿Puedo recorrer una variable de tabla en T-SQL?
Genial, nunca supe de ese comando de DBCC. ¡Gracias! –
Uno no puede TRONCATE una variable de tabla, tampoco se puede usar DBCC CHECKIDENT en una variable de tabla. – AndrewJacksonZA
-1 La pregunta fue específicamente sobre las variables de tabla. Como se indica en el comentario anterior, nada en esta respuesta puede usarse para estos. –