Aumentar identity sin añadir registros

26/06/2006 - 20:15 por Carlos | Informe spam
Hola,

Tengo una tabla (Tabla1) con un campo identity. En una segunda tabla quiero
insertar un registro que tome como valor del campo clave, el proximo
@@Identity de la Tabla1 y que esta Tabla1 quede modificada para no utilizar
este valor, es decir, aumentar el valor identity de Tabla1 para utilizarlo en
Tabla2.

Ejemplo por si no me he explicado bien:

Tabla 1
Codigo
1
2
3
- aquí inserto un reg. en Tabla 2
Tabla 2
Codigo
4
Tabla1
Codigo
1
2
3
5 <-

¿Es posible hacer esto?
Gracias.

Preguntas similare

Leer las respuestas

#1 Maxi
26/06/2006 - 20:18 | Informe spam
Hola, no puedes hacer eso con los identitis. Si quieres esa funcionalidad te
conviene manejar los numeradores de forma manual

http://www.microsoft.com/spanish/ms...art187.asp


Salu2
Maxi [MVP SQL SERVER]
www.sqlgurus.org


"Carlos" escribió en el mensaje
news:
Hola,

Tengo una tabla (Tabla1) con un campo identity. En una segunda tabla
quiero
insertar un registro que tome como valor del campo clave, el proximo
@@Identity de la Tabla1 y que esta Tabla1 quede modificada para no
utilizar
este valor, es decir, aumentar el valor identity de Tabla1 para utilizarlo
en
Tabla2.

Ejemplo por si no me he explicado bien:

Tabla 1
Codigo
1
2
3
- aquí inserto un reg. en Tabla 2
Tabla 2
Codigo
4
Tabla1
Codigo
1
2
3
5 <-

¿Es posible hacer esto?
Gracias.


Respuesta Responder a este mensaje
#2 Pablo
26/06/2006 - 21:10 | Informe spam
Si es posible pero debes setear la tabla con el idenity para poder
modificarla SET IDENTITY_INSERT TABLENAME ON

pero esto no es para nada recomendeble ya que debes asegurarte de que no
quieras grabar una identidad ya utilizada...
si buscas en la ayuda del SQL en la propiedad identity vas a encontrar todos
los detalles de como utilizarla.
yo te recomiendo que revises el diseño de tu base de datos y busques la
forma grabar las tablas con los registros correspondientes de manera manual.
Pablo

"Carlos" escribió en el mensaje
news:
Hola,

Tengo una tabla (Tabla1) con un campo identity. En una segunda tabla


quiero
insertar un registro que tome como valor del campo clave, el proximo
@@Identity de la Tabla1 y que esta Tabla1 quede modificada para no


utilizar
este valor, es decir, aumentar el valor identity de Tabla1 para utilizarlo


en
Tabla2.

Ejemplo por si no me he explicado bien:

Tabla 1
Codigo
1
2
3
- aquí inserto un reg. en Tabla 2
Tabla 2
Codigo
4
Tabla1
Codigo
1
2
3
5 <-

¿Es posible hacer esto?
Gracias.


Respuesta Responder a este mensaje
#3 J.A. García Barceló
27/06/2006 - 13:57 | Informe spam
Sí es posible, usando triggers INSTEAD OF:

CREATE TABLE [dbo].[T1](
[Codigo] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,
[AlgoQueInsertar] [varchar](50) COLLATE Modern_Spanish_CI_AS NULL,
CONSTRAINT [PK_T1] PRIMARY KEY CLUSTERED
(
[Codigo] ASC
)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

CREATE TABLE [dbo].[T2](
[Codigo] [int] NOT NULL,
[AlgunaOtraCosa] [varchar](50) COLLATE Modern_Spanish_CI_AS NULL,
CONSTRAINT [PK_T2] PRIMARY KEY CLUSTERED
(
[Codigo] ASC
)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

CREATE TRIGGER [dbo].[trg_ins_T2] ON [dbo].[T2]
INSTEAD OF INSERT
AS
BEGIN
DECLARE @id int
SET NOCOUNT ON;

SAVE TRANSACTION mipuntoderestauracion
INSERT INTO T1 (AlgoQueInsertar) VALUES ('')
SELECT @id = @@identity
ROLLBACK TRANSACTION mipuntoderestauracion

INSERT INTO T2 (Codigo, AlgunaOtraCosa)
SELECT @id, inserted.AlgunaOtraCosa FROM inserted
END


Ahora las pruebas:

INSERT INTO T1 (AlgoQueInsertar) VALUES ('test1')
INSERT INTO T1 (AlgoQueInsertar) VALUES ('test2')
INSERT INTO T1 (AlgoQueInsertar) VALUES ('test3')
SELECT * FROM T1

GO

INSERT INTO T2 (AlgunaOtraCosa) VALUES ('a ver si rula...')
SELECT * FROM T1
SELECT * FROM T2
GO

INSERT INTO T1 (AlgoQueInsertar) VALUES ('test4')
SELECT * FROM T1

GO


La única limitación es que en la tabla T2 solo puedes hacer una inserción en
cada statement. No es posible insertar mas de un registro de una vez.

Un saludo.


J.A. García Barceló
http://jagbarcelo.blogspot.com/


"Carlos" escribió en el mensaje
news:
Hola,

Tengo una tabla (Tabla1) con un campo identity. En una segunda tabla
quiero
insertar un registro que tome como valor del campo clave, el proximo
@@Identity de la Tabla1 y que esta Tabla1 quede modificada para no
utilizar
este valor, es decir, aumentar el valor identity de Tabla1 para utilizarlo
en
Tabla2.

Ejemplo por si no me he explicado bien:

Tabla 1
Codigo
1
2
3
- aquí inserto un reg. en Tabla 2
Tabla 2
Codigo
4
Tabla1
Codigo
1
2
3
5 <-

¿Es posible hacer esto?
Gracias.


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida