Estoy trabajando un script para modificar varias tablas (como 25 o 30
tablas) de una base de datos como parte de un proyecto de migración. La
mayor parte de los cambios consiste en crear un campo que se constituirá
como el nuevo primary key. Para esto, por supuesto, voy a utilizar las
bondades del ALTER TABLE. El único problema es que no encuentro
documentación sobre cómo puedo añadir una columna y posicionarla antes que
las demás.
La razón es estética, pero también funcional, pues es más fácil para el
equipo de trabajo localizar los PK cuando están trabajando en el desarrollo
de la aplicación que se está planificando.
¿Es posible hacer esto? ¿Conoce alguien de un enlace que me pueda ayudar?
Tengo sospechas de que se puede hacer, pues yo lo he hecho antes en MySQL
con las cláusulas FIRST y BEFORE.
Muchas gracias por la ayuda.
C a r l o s A n t o n i o
Hasta donde yo se no es posible mediante T-SQL modificar el orden de las
columnas. Si tan importante es para ti el tener dicha columna en orden te
recomiendo que crees una nueva la tabla con la nueva columna, hagas un
volcado de los datos y luego borres la anterior y renombras la nueva. Si
buscas por ahi igual encuentras algunos trucos para modificar el orden de la
columna modificando tablas de sistema pero yo te recomendaría que fueses por
esa vía bajo ningún concepto.
Si con las "bondades" del ALTER TABLE lo que pretendías evitar era la
lectura/escritura de los datos de la tabla... me temo que va a ser
complicado no pasar por ese trámite.
--
Rubén Garrigós
Solid Quality Mentors
"C a r l o s A n t o n i o" <carlvazpr¿arroba?yahoo.com> wrote in message
news:uxhtJbOx...@TK2MSFTNGP04.phx.gbl...
En las tablas del sistema la posición de la columna se almacena mediante un
valor entero, pero yo evitaría jugar con eso.
--
Gustavo Larriera, Microsoft MVP
http://www.linkedin.com/in/gustavolarriera
--
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.
"Rubén Garrigós" wrote:
> Hola Carlos Antonio,
>
> Hasta donde yo se no es posible mediante T-SQL modificar el orden de las
> columnas. Si tan importante es para ti el tener dicha columna en orden te
> recomiendo que crees una nueva la tabla con la nueva columna, hagas un
> volcado de los datos y luego borres la anterior y renombras la nueva. Si
> buscas por ahi igual encuentras algunos trucos para modificar el orden de la
> columna modificando tablas de sistema pero yo te recomendara que fueses por
> esa va bajo ningn concepto.
>
> Si con las "bondades" del ALTER TABLE lo que pretendas evitar era la
> lectura/escritura de los datos de la tabla... me temo que va a ser
> complicado no pasar por ese trmite.
>
> --
>
> Rubn Garrigs
> Solid Quality Mentors
>
> "C a r l o s A n t o n i o" <carlvazprarroba?yahoo.com> wrote in message
> news:uxhtJbOx...@TK2MSFTNGP04.phx.gbl...
> > Saludos Compaeros,
> >
> > Estoy trabajando un script para modificar varias tablas (como 25 o 30
> > tablas) de una base de datos como parte de un proyecto de migracin. La
> > mayor parte de los cambios consiste en crear un campo que se constituir
> > como el nuevo primary key. Para esto, por supuesto, voy a utilizar las
> > bondades del ALTER TABLE. El nico problema es que no encuentro
> > documentacin sobre cmo puedo aadir una columna y posicionarla antes que
> > las dems.
> >
> > La razn es esttica, pero tambin funcional, pues es ms fcil para el
> > equipo de trabajo localizar los PK cuando estn trabajando en el
> > desarrollo de la aplicacin que se est planificando.
> >
> > Es posible hacer esto? Conoce alguien de un enlace que me pueda ayudar?
> > Tengo sospechas de que se puede hacer, pues yo lo he hecho antes en MySQL
> > con las clusulas FIRST y BEFORE.
Es mas, este tipo de cambios desde el SSMS si los quiere aplicar lo que
termina haciendo es un drop de la tabla y crear una temporal, muchos
desarrolladores esto no lo conoce y dependiendo de la cantidad de registros
y criticidad de la tabla se podia entrar en algun problema.
Es mas aqui le dejo un link a una de las mejoras que han hecho en ssms 2008
para evitar que este tipo de cambios impacten sobre la performance.
Pienselo bien, para que quiere las columnas en un orden?
--
---------------------------------------------------------------------
Maxi Accotto
Microsoft MVP en SQL Server
Consultor en SQL Server
---------------------------------------------------------------------
"C a r l o s A n t o n i o" <carlvazpr¿arroba?yahoo.com> escribió en el
mensaje de noticias:uxhtJbOx...@TK2MSFTNGP04.phx.gbl...
--
-----------------------------
"Caminar sobre el agua y desarrollar software a partir de unas
especificaciones es fácil. si ambas están congeladas."
Edward V. Berard, ingeniero informático
http://blogs.solidq.com/es/elrincondeldba
"C a r l o s A n t o n i o" <carlvazpr¿arroba?yahoo.com> escribió en el
mensaje news:uxhtJbOx...@TK2MSFTNGP04.phx.gbl...
Voy a seguir sus consejos y voy a DROPear y recrear las tablas a ver que tal
resulta.
Muchas gracias por su ayuda desinteresada y saludos,
Carlos
"Carlos Sacristan" <nomail> wrote in message
news:OomKgKRx...@TK2MSFTNGP04.phx.gbl...
BEGIN TRANSACTION
GO
CREATE TABLE dbo.Tmp_CLIENTES
(
ID int NOT NULL,
NOMBRE varchar(50) NULL,
APELLIDO varchar(100) NULL,
cuit nchar(10) NULL,
DIRECCION nchar(10) NULL
) ON [PRIMARY]
GO
ALTER TABLE dbo.Tmp_CLIENTES SET (LOCK_ESCALATION = TABLE)
GO
IF EXISTS(SELECT * FROM dbo.CLIENTES)
EXEC('INSERT INTO dbo.Tmp_CLIENTES (ID, NOMBRE, cuit, DIRECCION)
SELECT ID, NOMBRE, cuit, DIRECCION FROM dbo.CLIENTES WITH (HOLDLOCK
TABLOCKX)')
GO
DROP TABLE dbo.CLIENTES
GO
EXECUTE sp_rename N'dbo.Tmp_CLIENTES', N'CLIENTES', 'OBJECT'
GO
ALTER TABLE dbo.CLIENTES ADD CONSTRAINT
PK_CLIENTES PRIMARY KEY CLUSTERED
(
ID
) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS
= ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
COMMIT
--
---------------------------------------------------------------------
Maxi Accotto
Microsoft MVP en SQL Server
Consultor en SQL Server
---------------------------------------------------------------------
"C a r l o s A n t o n i o" <carlvazpr¿arroba?yahoo.com> escribió en el
mensaje de noticias:##neVBbxJ...@TK2MSFTNGP04.phx.gbl...