Identity Columns | SQL Server Performance Forums

SQL Server Performance Forum – Threads Archive

Identity Columns

Hola grupo!. Tengo la siguiente situación:
Tengo una tabla que que estoy llenando y vaciando periódicamente. Esta tabla tiene un campo Identidad, el problema ocurre cuando vuelvo a llenarla después de haberla borrado, ya que el campo identidad conserva la numeración del último registro y a los nuevos registros los numera a partir del número que quedó registrado como último. ¿Cómo hacer para regresar esta numeración al #1 nuevamente?. He intentado con la instrucción "SET IDENTITY_INSERT table ON", pero hay que estar indicando constantemente el número correspondiente a la columna Identidad, y la carga de información a la tabla se realizan mediante la ejecución de un DTS package, por lo que no puedo estarle indicando línea por línea de inserción el número que le corresponde al campo Identidad de la tabla.
Espero me puedan ayudar con este problema.
Gracias. Enrique. Enrique Madrigal
El siguiente ejemplo crea una tabla con identificador de columnas y muestra como SET IDENTITY_INSERT puede ser usado para llenar el gap en los valores causados por la sentencia DELETE. — Create products table.
CREATE TABLE products (id int IDENTITY PRIMARY KEY, product varchar(40))
GO
— Inserting values into products table.
INSERT INTO products (product) VALUES (‘screwdriver’)
INSERT INTO products (product) VALUES (‘hammer’)
INSERT INTO products (product) VALUES (‘saw’)
INSERT INTO products (product) VALUES (‘shovel’)
GO — Create a gap in the identity values.
DELETE products
WHERE product = ‘saw’
GO SELECT *
FROM products
GO — Attempt to insert an explicit ID value of 3;
— should return a warning.
INSERT INTO products (id, product) VALUES(3, ‘garden shovel’)
GO
— SET IDENTITY_INSERT to ON.
SET IDENTITY_INSERT products ON
GO — Attempt to insert an explicit ID value of 3
INSERT INTO products (id, product) VALUES(3, ‘garden shovel’).
GO SELECT *
FROM products
GO
— Drop products table.
DROP TABLE products
GO Puede ser lo anterior la solución? Luis Martin
Moderator
SQL-Server-Performance.com All postings are provided “AS IS” with no warranties for accuracy.
Muchas gracias Luis.
El código que me mandas me funciona para hacer inserciones indicando el número de la campo identidad que se necesita para el registro a insertar. ¿Pero cómo hacer si quiero que comience desde el #1, y además tengo que cargar todos los registros de una tabla y no solo un registro?. En este tipo de acutalización del Identity Column necesito indicar el # que quiero el el campo identidad y puedo indicárselo si la actualización se hace desde la ejecución de un DTS package. ¿Existe alguna instrucción para regresar la numeración de la tabla al indicado en el parámetro "seed", que en el caso de mi tabla es el #1?
Gracias nuevamente.
Enrique Madrigal
Enrique: Dame un tiempo que voy a consultar con los expertos en DTS.
Luis Martin
Moderator
SQL-Server-Performance.com All postings are provided “AS IS” with no warranties for accuracy.
Si la tabla es TRUNCATED con la sentencia TRUNCATE TABLE…, entonces el valor de Indentity comenzará desde el principio nuevamente.
Luis Martin
Moderator
SQL-Server-Performance.com All postings are provided “AS IS” with no warranties for accuracy.
Cierto!. Ya lo he probado y funciona.
Muchas gracias por tu ayuda Luis. Enrique Madrigal Enrique Madrigal
El TRUNCATE trabaja más rápidamente puesto que no se registra las bajas en el Transaction LOG, sin embargo si la recuperación es una alta prioridad yo recomiende que utilize el DELETE commando y applice este DBCC comando en la table. DBCC CHECKIDENT(MyTable,RESEED,0) [8D] esto es otra solucion mas segura.
]]>