Agregar una llave primaria a una tabla existente

15/04/2009 - 17:17 por Ivan Rico | Informe spam
Hola a todos,

Tengo un sistema el cuál hay que hacerle unas cuantas modificaciones a su
diseño en la Base de Datos, (es un sql server 2005 ) y una de las tareas que
hare es agregar un índice a una tabla muy utilizada, por lo que he leído
debo hacerlo mediante comandos ya que lo he intentando desde el EM y marca
error, tal vez por que la tabla esta constantemente en uso, en fin este es
el código que pretendo ejecutar:


ALTER TABLE MENSAJES_RECIBIDOS
ADD ID_MENSAJE_RECIBIDO INT PRIMARY KEY IDENTITY

DROP INDEX IDX_ID_EQUIPO ON MENSAJES_RECIBIDOS
DROP INDEX MENSAJES_RECIBIDOS_INDEX ON MENSAJES_RECIBIDOS
DROP INDEX PK__MENSAJES_RECIBID__2FCC1EF8 ON MENSAJES_RECIBIDOS



CREATE CLUSTERED INDEX IDX_MENSAJE_RECIBIDO ON
MENSAJES_RECIBIDOS(ID_MENSAJE_RECIBIDO DESC)

CREATE NONCLUSTERED INDEX MENSAJES_RECIBIDOS_INDEX ON MENSAJES_RECIBIDOS
(ID_EQUIPO ASC, FECHA_RECEPCION DESC)

lo he ejecutado en la BD de pruebas y parece que todo va bien, por desgracia
la BD de prueba no tiene transacciones activas y por eso me queda la duda:

¿Qué va a pasar si ejecuto esto en la BD con transacciones activas
(insertar, actualizar o consultas)?
¿se pierden o se quedan como en espera hasta que se ejecute el script???

ya por último como se le puede hacer para el nuevo campo se agrege al
principio?

saludos a todos,

Iván Rico
 

Leer las respuestas

#1 Maxi
15/04/2009 - 17:20 | Informe spam
Hola, puede demorar la creacion de indices y el identoty dependiendo de la
cantidad de registros. Le recomiendo que programe este cambio en un horario
de mantenimiento



Maxi Accotto
Microsoft MVP en SQL Server
Consultor en SQL Server



"Ivan Rico" escribió en el mensaje de
noticias:
Hola a todos,

Tengo un sistema el cuál hay que hacerle unas cuantas modificaciones a su
diseño en la Base de Datos, (es un sql server 2005 ) y una de las tareas
que hare es agregar un índice a una tabla muy utilizada, por lo que he
leído debo hacerlo mediante comandos ya que lo he intentando desde el EM y
marca error, tal vez por que la tabla esta constantemente en uso, en fin
este es el código que pretendo ejecutar:


ALTER TABLE MENSAJES_RECIBIDOS
ADD ID_MENSAJE_RECIBIDO INT PRIMARY KEY IDENTITY

DROP INDEX IDX_ID_EQUIPO ON MENSAJES_RECIBIDOS
DROP INDEX MENSAJES_RECIBIDOS_INDEX ON MENSAJES_RECIBIDOS
DROP INDEX PK__MENSAJES_RECIBID__2FCC1EF8 ON MENSAJES_RECIBIDOS



CREATE CLUSTERED INDEX IDX_MENSAJE_RECIBIDO ON
MENSAJES_RECIBIDOS(ID_MENSAJE_RECIBIDO DESC)

CREATE NONCLUSTERED INDEX MENSAJES_RECIBIDOS_INDEX ON MENSAJES_RECIBIDOS
(ID_EQUIPO ASC, FECHA_RECEPCION DESC)

lo he ejecutado en la BD de pruebas y parece que todo va bien, por
desgracia la BD de prueba no tiene transacciones activas y por eso me
queda la duda:

¿Qué va a pasar si ejecuto esto en la BD con transacciones activas
(insertar, actualizar o consultas)?
¿se pierden o se quedan como en espera hasta que se ejecute el script???

ya por último como se le puede hacer para el nuevo campo se agrege al
principio?

saludos a todos,

Iván Rico

Preguntas similares