2008-09-29 7 views

Respuesta

33

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.

35

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) 
+1

Genial, nunca supe de ese comando de DBCC. ¡Gracias! –

+15

Uno no puede TRONCATE una variable de tabla, tampoco se puede usar DBCC CHECKIDENT en una variable de tabla. – AndrewJacksonZA

+8

-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. –

-3

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
+2

No. Esto no funciona –

0
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

0

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

0

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) 
Cuestiones relacionadas