T-SQL ALTER TABLE con posicion de columna

24/04/2009 - 16:09 por C a r l o s A n t o n i o | Informe spam
Saludos Compañeros,

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

Preguntas similare

Leer las respuestas

#6 Maxi
25/04/2009 - 16:31 | Informe spam
Hola, aqui te paso un ejemplo completo de TSQL para que te des una idea, en
el mismo puse el apellido luego del nombre


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:##
Muchas gracias por las respuestas de todos Tenía la sospecha de cuales
serían sus contestaciones pues mientras esperaba me dediqué a buscar en la
internet sin encontrar nada. La razón para cambiar el orden de las
columnas es sencilla: "El jefe lo pidió.". Aunque puede ser una tarea
sin sentido, no cabe la duda que será interesante lograrlo máxime si me
pagan por ello.

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:
Tal y como bien dicen los demás, eso no es posible en SQL Server. Si lo
quieres hacer por temas de facilidades a los desarrolladores la única
solución es la de recrear la tabla, con las implicaciones que ello tiene.
Sin embargo, tal vez podrías generar esos nuevos campos que son PK con
algún identificador que también ayude a los desarrolladores a
localizarlos como pueda ser un prefijo o similar.

"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:
Saludos Compañeros,

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









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