Identity_Insert ON/OFF con parámetros
Publicado por María Inés Burgos (2 intervenciones) el 27/08/2018 22:33:56
Buenos días! He pensado en remover de mi tabla principal (historia clínica) de la base de datos los registros que hace más de 5 años no se usen para quitarlos del movimiento diario de información, pero guardarlos porque puedo necesitarlos.
Esta tabla principal Historia clínica, es llave foránea de otra tabla Consultas y a su vez ésta última lo es de otras 4 tablas más.
Con un simple select sobre un campo fecha obtengo el ID de la tabla historia clínica de los pacientes que hace 5 años no veo. Luego, he creado otra base de datos que es exactamente igual a esta de donde quiero remover los registros e inserto con un insert múltiple los datos de la base de datos original a esta otra de "baja", para posteriormente borrar el paciente con todos sus datos asociados en las otras tablas de mi base central.
Hasta ahí voy bien. Pero pensé, si a alguno de estos pacientes después de 5 años se le ocurre volver, debería poder restaurar los datos a la tabla original, la cual uso en Visual.net para la aplicación.
Todas las tablas tienen campos identity.
He leído sobre el IDENTITY_INSERT ON/OFF y lo he podido aplicar probandolo con valores, ahora mi problema es que necesito pasarle un parámetro porque el insert into tiene que tomar los valores de la tabla "baja" que yo le indico a través del ID. es decir, necesito pasarle desde visual el Número de historia clínica, para que me recupere de éstos.
Y bueno, noté escribiendo el stored procedure que ésto no lo permite (poner simplemente @NHC smallint) Me obliga a poner "Declare" y no me sirve para poder pasarle los datos desde visual. De otro modo con un SET podría solucionarlo, pero el tema es que quería automatizarlo mandándole el dato desde Visual.Net
algo así me quedaría (abrevio los campos porque son muchos)
Después debo repetir eso para el resto de las tablas dado que por lo que vi, no se permite más de 1 identity insert ON por sentencia. Pero eso sería lo de menos.
Desde ya muchas gracias y leo sus sugerencias y correcciones
PD: estoy usando SQL server Management Studio 2017
Esta tabla principal Historia clínica, es llave foránea de otra tabla Consultas y a su vez ésta última lo es de otras 4 tablas más.
Con un simple select sobre un campo fecha obtengo el ID de la tabla historia clínica de los pacientes que hace 5 años no veo. Luego, he creado otra base de datos que es exactamente igual a esta de donde quiero remover los registros e inserto con un insert múltiple los datos de la base de datos original a esta otra de "baja", para posteriormente borrar el paciente con todos sus datos asociados en las otras tablas de mi base central.
Hasta ahí voy bien. Pero pensé, si a alguno de estos pacientes después de 5 años se le ocurre volver, debería poder restaurar los datos a la tabla original, la cual uso en Visual.net para la aplicación.
Todas las tablas tienen campos identity.
He leído sobre el IDENTITY_INSERT ON/OFF y lo he podido aplicar probandolo con valores, ahora mi problema es que necesito pasarle un parámetro porque el insert into tiene que tomar los valores de la tabla "baja" que yo le indico a través del ID. es decir, necesito pasarle desde visual el Número de historia clínica, para que me recupere de éstos.
Y bueno, noté escribiendo el stored procedure que ésto no lo permite (poner simplemente @NHC smallint) Me obliga a poner "Declare" y no me sirve para poder pasarle los datos desde visual. De otro modo con un SET podría solucionarlo, pero el tema es que quería automatizarlo mandándole el dato desde Visual.Net
algo así me quedaría (abrevio los campos porque son muchos)
1
2
3
4
5
6
7
8
Create Procedure Restaurar_Paciente
as
SET IDENTITY_INSERT HC ON
GO
Declare @NHC Smallint
insert into CargaHC(NHC, Fecha, Apellido, DNI, Domicilio, etc) (SELECT NHC, Fecha, Apellido, DNI, Domicilio, etc where HCBaja.dbo.HCBaja.NHC = @NHC)
SET IDENTITY_INSERT HC OFF
GO
Después debo repetir eso para el resto de las tablas dado que por lo que vi, no se permite más de 1 identity insert ON por sentencia. Pero eso sería lo de menos.
Desde ya muchas gracias y leo sus sugerencias y correcciones

PD: estoy usando SQL server Management Studio 2017
Valora esta pregunta


0