Cómo incrementar (o de reserva) valor de IDENTIDAD en SQL Server sin necesidad de insertar en la tabla

StackOverflow https://stackoverflow.com/questions/480309

Pregunta

Es allí una manera de reservar o saltar o incremento de valor de columna de identidad?

Tengo dos tablas unidas en una relación de la nave.Primero uno tiene IDENTIDAD PK columna, y una segunda int PK (no IDENTIDAD).He utilizado para insertar en primer lugar, obtener el ID y la inserte en el segundo.Y funciona bien.

Ahora tengo que insertar valores en la segunda tabla, sin insertar en primera.

Ahora, cómo incrementar la IDENTIDAD de la semilla, para que yo pueda insertar en la segunda tabla, pero deja un "hueco" en el ID de la primera tabla?

EDITAR:Más info

Esto funciona:

-- I need new seed number, but not table row 
-- so i will insert foo row, get id, and delete it
INSERT INTO TABLE1 (SomeRequiredField) VALUES ('foo'); 
SET @NewID = SCOPE_IDENTITY(); 
DELETE FROM TABLE1 WHERE ID=@NewID;

-- Then I can insert in TABLE2  
INSERT INTO (ID, Field, Field) VALUES (@NewID, 'Value', 'Value'); 

Una vez más, esto funciona.

La pregunta es ¿puedo obtener el ID sin necesidad de insertar en la tabla?

DBCC necesidades del propietario de los derechos;hay una limpia de usuario que se puede llamar de SQL para hacer eso?

¿Fue útil?

Solución

Esta situación hará que su total estructura de datos muy difícil de entender.Si no hay una relación entre los valores, luego de romper la relación.

Hay maneras de conseguir alrededor de esto para hacer lo que usted está buscando, pero normalmente es en un entorno distribuido y no se hace porque de lo que parece ser un modelo de datos de cambio.

Otros consejos

Entonces no es de más de un uno-a-uno de la relación.

Acaba de romper el PK restricción.

El uso de un DBCC CHECKIDENT declaración.

Este artículo a partir de los Libros de SQL Server en Línea se analiza el uso de la DBCC CHECKIDENT método para la actualización de la identidad de la semilla de una tabla.

De ese artículo:

En este ejemplo se obliga a que el valor de identidad actual de la tabla de trabajos a un valor de 30.

USE pubs
GO
DBCC CHECKIDENT (jobs, RESEED, 30)
GO

Me gustaría ver en el OUTPUT INTO función de si está utilizando SQL Server 2005 o superior.Esto le permitirá insertar en la tabla principal, y tomar el Id asignado en ese momento para crear filas de la tabla secundaria.

Estoy suponiendo que no hay una restricción de clave externa forzada - porque esa sería la única razón por la que tendría que hacer esto en primer lugar.

Cómo hacer el plan de adecuación de ellos hasta más tarde?Yo no pondría registros en la segunda tabla sin un registro en la primera, que es la razón por la que se establece en una relación de clave externa a la stio ese tipo de acción.Sólo ¿por qué no se quiere insertar registros en la primera tabla de todos modos?Si supiéramos más acerca del tipo de aplicación y por qué esto es necesario, podríamos ser capaces de guiar a una solución.

esto podría ayudar a

SET IDENTITY_INSERT [ database_name .[ schema_name ] .] tabla { ON | OFF }

http://msdn.microsoft.com/en-us/library/aa259221(SQL.80).aspx

Permite valores explícitos para ser insertado en la columna de identidad de una tabla.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top