En resumén... como dijo Maxi..

Si la tabla es grande o compleja no conviene hacer cosas extrañas.

Saludos,
Diego.

Maxi Accotto wrote:
Exacto, mira el resultado de hacer eso de una tablita de mi sistema :)
 

BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
ALTER TABLE dbo.ALLOCATION
 DROP CONSTRAINT FKEY9484
GO
COMMIT
BEGIN TRANSACTION
ALTER TABLE dbo.ALLOCATION
 DROP CONSTRAINT FKEY0016
GO
COMMIT
BEGIN TRANSACTION
ALTER TABLE dbo.ALLOCATION
 DROP CONSTRAINT DF__ALLOCATIO__TRIGG__1A2ABD85
GO
ALTER TABLE dbo.ALLOCATION
 DROP CONSTRAINT DF__ALLOCATIO__POST___1B1EE1BE
GO
ALTER TABLE dbo.ALLOCATION
 DROP CONSTRAINT DF__ALLOCATIO__POST___1C1305F7
GO
ALTER TABLE dbo.ALLOCATION
 DROP CONSTRAINT DF__ALLOCATIO__CREAT__1D072A30
GO
CREATE TABLE dbo.Tmp_ALLOCATION
 (
 ROWID int NOT NULL IDENTITY (1, 1),
 ID varchar(5) NOT NULL,
 DESCRIPTION varchar(80) NULL,
 GROUP_ID varchar(15) NULL,
 FROM_GL_ACCT_ID varchar(30) NOT NULL,
 FROM_ENTITY_ID varchar(5) NOT NULL,
 TRIGGER_FREQ char(1) NOT NULL,
 nn char(10) NULL,
 TRIGGER_DAY smallint NULL,
 VARIABLE_NAME_1 varchar(30) NULL,
 VARIABLE_NAME_2 varchar(30) NULL,
 VARIABLE_NAME_3 varchar(30) NULL,
 VARIABLE_NAME_4 varchar(30) NULL,
 VARIABLE_NAME_5 varchar(30) NULL,
 VARIABLE_NAME_6 varchar(30) NULL,
 VARIABLE_NAME_7 varchar(30) NULL,
 VARIABLE_NAME_8 varchar(30) NULL,
 VARIABLE_NAME_9 varchar(30) NULL,
 VARIABLE_NAME_10 varchar(30) NULL,
 VARIABLE_VALUE_1 decimal(13, 3) NULL,
 VARIABLE_VALUE_2 decimal(13, 3) NULL,
 VARIABLE_VALUE_3 decimal(13, 3) NULL,
 VARIABLE_VALUE_4 decimal(13, 3) NULL,
 VARIABLE_VALUE_5 decimal(13, 3) NULL,
 VARIABLE_VALUE_6 decimal(13, 3) NULL,
 VARIABLE_VALUE_7 decimal(13, 3) NULL,
 VARIABLE_VALUE_8 decimal(13, 3) NULL,
 VARIABLE_VALUE_9 decimal(13, 3) NULL,
 VARIABLE_VALUE_10 decimal(13, 3) NULL,
 TRIGGER_COUNT smallint NULL,
 TRIGGER_MAX smallint NULL,
 TRIGGER_LAST_DATE datetime NULL,
 CURRENCY_ID varchar(15) NULL,
 POST_ALL_TRACKING char(1) NOT NULL,
 POST_AS_NATIVE char(1) NOT NULL,
 CREATE_DATE datetime NULL,
 LAST_EXECUTED_DATE datetime NULL
 )  ON [PRIMARY]
GO
ALTER TABLE dbo.Tmp_ALLOCATION ADD CONSTRAINT
 DF__ALLOCATIO__TRIGG__1A2ABD85 DEFAULT ('N') FOR TRIGGER_FREQ
GO
ALTER TABLE dbo.Tmp_ALLOCATION ADD CONSTRAINT
 DF__ALLOCATIO__POST___1B1EE1BE DEFAULT ('Y') FOR POST_ALL_TRACKING
GO
ALTER TABLE dbo.Tmp_ALLOCATION ADD CONSTRAINT
 DF__ALLOCATIO__POST___1C1305F7 DEFAULT ('Y') FOR POST_AS_NATIVE
GO
ALTER TABLE dbo.Tmp_ALLOCATION ADD CONSTRAINT
 DF__ALLOCATIO__CREAT__1D072A30 DEFAULT (getdate()) FOR CREATE_DATE
GO
SET IDENTITY_INSERT dbo.Tmp_ALLOCATION ON
GO
IF EXISTS(SELECT * FROM dbo.ALLOCATION)
  EXEC('INSERT INTO dbo.Tmp_ALLOCATION (ROWID, ID, DESCRIPTION, GROUP_ID, FROM_GL_ACCT_ID, FROM_ENTITY_ID, TRIGGER_FREQ, TRIGGER_DAY, VARIABLE_NAME_1, VARIABLE_NAME_2, VARIABLE_NAME_3, VARIABLE_NAME_4, VARIABLE_NAME_5, VARIABLE_NAME_6, VARIABLE_NAME_7, VARIABLE_NAME_8, VARIABLE_NAME_9, VARIABLE_NAME_10, VARIABLE_VALUE_1, VARIABLE_VALUE_2, VARIABLE_VALUE_3, VARIABLE_VALUE_4, VARIABLE_VALUE_5, VARIABLE_VALUE_6, VARIABLE_VALUE_7, VARIABLE_VALUE_8, VARIABLE_VALUE_9, VARIABLE_VALUE_10, TRIGGER_COUNT, TRIGGER_MAX, TRIGGER_LAST_DATE, CURRENCY_ID, POST_ALL_TRACKING, POST_AS_NATIVE, CREATE_DATE, LAST_EXECUTED_DATE)
  SELECT ROWID, ID, DESCRIPTION, GROUP_ID, FROM_GL_ACCT_ID, FROM_ENTITY_ID, TRIGGER_FREQ, TRIGGER_DAY, VARIABLE_NAME_1, VARIABLE_NAME_2, VARIABLE_NAME_3, VARIABLE_NAME_4, VARIABLE_NAME_5, VARIABLE_NAME_6, VARIABLE_NAME_7, VARIABLE_NAME_8, VARIABLE_NAME_9, VARIABLE_NAME_10, VARIABLE_VALUE_1, VARIABLE_VALUE_2, VARIABLE_VALUE_3, VARIABLE_VALUE_4, VARIABLE_VALUE_5, VARIABLE_VALUE_6, VARIABLE_VALUE_7, VARIABLE_VALUE_8, VARIABLE_VALUE_9, VARIABLE_VALUE_10, TRIGGER_COUNT, TRIGGER_MAX, TRIGGER_LAST_DATE, CURRENCY_ID, POST_ALL_TRACKING, POST_AS_NATIVE, CREATE_DATE, LAST_EXECUTED_DATE FROM dbo.ALLOCATION TABLOCKX')
GO
SET IDENTITY_INSERT dbo.Tmp_ALLOCATION OFF
GO
ALTER TABLE dbo.ALLOCATION_DETAIL
 DROP CONSTRAINT FKEY0217
GO
DROP TABLE dbo.ALLOCATION
GO
EXECUTE sp_rename N'dbo.Tmp_ALLOCATION ', N'ALLOCATION', 'OBJECT'
GO
ALTER TABLE dbo.ALLOCATION ADD CONSTRAINT
 PK_ALLOCATION PRIMARY KEY CLUSTERED
 (
 ID
 ) WITH FILLFACTOR = 90 ON [PRIMARY]

GO
ALTER TABLE dbo.ALLOCATION WITH NOCHECK ADD CONSTRAINT
 CHK0064 CHECK ((([TRIGGER_FREQ] = 'M' or [TRIGGER_FREQ] = 'W' or [TRIGGER_FREQ] = 'N') and ([POST_ALL_TRACKING] = 'Y' or [POST_ALL_TRACKING] = 'N') and ([POST_AS_NATIVE] = 'Y' or [POST_AS_NATIVE] = 'N')))
GO
ALTER TABLE dbo.ALLOCATION WITH NOCHECK ADD CONSTRAINT
 FKEY0016 FOREIGN KEY
 (
 FROM_ENTITY_ID
 ) REFERENCES dbo.ENTITY
 (
 ID
 )
GO
ALTER TABLE dbo.ALLOCATION WITH NOCHECK ADD CONSTRAINT
 FKEY9484 FOREIGN KEY
 (
 CURRENCY_ID
 ) REFERENCES dbo.CURRENCY
 (
 ID
 )
GO
CREATE TRIGGER UPDATE_ALLOCATION on dbo.ALLOCATION for UPDATE as
SET NOCOUNT ON
DECLARE @nRcd    INT
DECLARE @O_ID    VARCHAR(15)
DECLARE @N_ID    VARCHAR(15)
DECLARE @TRIGGER_FREQ   CHAR
DECLARE @FROM_GL_ACCT_ID  VARCHAR(30)
DECLARE @FROM_ENTITY_ID  VARCHAR(15)
SELECT @nRcd = 0
IF @nRcd = 0
BEGIN
DECLARE ALLOCATION_UPD CURSOR LOCAL FOR select i.trigger_freq, i.id, d.id from inserted i, deleted d where i.rowid = d.rowid
OPEN ALLOCATION_UPD
FETCH ALLOCATION_UPD INTO @TRIGGER_FREQ, @N_ID, @O_ID
WHILE (@nRcd = 0 and @@fetch_status <> -1)
BEGIN
  update ALLOCATION_DETAIL set ALLOC_ID = @N_ID where ALLOC_ID = @O_ID
  FETCH ALLOCATION_UPD INTO @TRIGGER_FREQ, @N_ID, @O_ID
END
DEALLOCATE ALLOCATION_UPD
END
IF (@nRcd <> 0) RAISERROR('VMFG-%d error in trigger UPDATE_ALLOCATION', 16, -1, @nRcd)
IF (@nRcd <> 0 Or @@ERROR <> 0) ROLLBACK TRANSACTION
GO
GRANT SELECT ON dbo.ALLOCATION TO SYSADM  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO RIOS  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO LORENA  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO JOSELUIS  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO BORDON  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO VICENTE  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO BRIZUELA  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO TAPIA  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO MARTIN  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO CASAO  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO CLAUDIA  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO TOLOZA  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO PABLO  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO MANFREDI  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO VAZQUEZ  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO RODOLFO  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO INGPROC  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO FERNANDO  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO DECAROLI  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO EUGENIO  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO WEISS  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO SILVINA  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO DANIELA  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO CARLOS  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO ESTECHE  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO ANA  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO ADRIANA  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO FAURE  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO MECANICA  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO ROSACE  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO PACILIO  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO ENZO  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO JAVIER  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO CORONEL  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO NICOLAS  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO [NO]  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO ROJAS  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO DICANDIA  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO ALBERTO  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO MANTE_PA  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO GOMES  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO CALUSIC  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO REBABA  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO ARAGUNDE  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO HORNO  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO GABRIELN  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO RICARDO  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO JOSE  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO COIRA  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO MOLDEO  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO HECTORF  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO ANTONIO  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO ACOSTA  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO SADRIANA  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO MATTIOLI  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO DALLORSO  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO CALIDAD  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO MAURO  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO POVIS  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO ALMACEN  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO CARLOSM  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO LUCIANA  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO MIGRA641  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO ANDRES  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO VANESA  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO BOTTI  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO INVDES  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO MAXI  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO NOEMI  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO JORGES  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO VILANOVA  AS dbo
GRANT REFERENCES ON dbo.ALLOCATION TO FSC_VM  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO FSC_VM  AS dbo
GRANT UPDATE ON dbo.ALLOCATION TO FSC_VM  AS dbo
GRANT INSERT ON dbo.ALLOCATION TO FSC_VM  AS dbo
GRANT DELETE ON dbo.ALLOCATION TO FSC_VM  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO DELOR  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO HSMA  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO BENGOCHE  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO INVENT  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO CINTIA  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO MARINA  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO CARO  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO RINAUDO  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO FRANCISC  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO ZVIOVICH  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO ESPOSITO  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO CAMPOS  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO MICHEL  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO MEDICI  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO TAUS  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO EDGARDO  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO BLUM  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO DLORENZO  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO SSANCHEZ  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO DIIORIOM  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO ADRI  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO PUENTE  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO MIRACOLA  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO CALING  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO BENITEZD  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO VANDERH  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO ACORONEL  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO FUSION  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO NCADMIN  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO USER1  AS dbo
GRANT SELECT ON dbo.ALLOCATION TO ESCALHAO  AS dbo
COMMIT
BEGIN TRANSACTION
ALTER TABLE dbo.ALLOCATION_DETAIL WITH NOCHECK ADD CONSTRAINT
 FKEY0217 FOREIGN KEY
 (
 ALLOC_ID
 ) REFERENCES dbo.ALLOCATION
 (
 ID
 ) ON DELETE CASCADE
 
GO
COMMIT



 
El día 12/10/06, Diego Campos <[EMAIL PROTECTED]> escribió:
Maxi,
Gracias por la advertencia..

En la edicion de la tabla, podes ver el codigo SQL que el EM generó para realizar la modificación que uno solicito.
Con el código en la mano uno puede evaluar el costo de lo que se le esta pidiendo.

Esto lo podes hacer siempre y cuando la tabla sea chica (como vos decis)....ya que si la tabla es grande, directamente no conviene hacer nada extraño y agregar la nueva columna
al final como corresponde.

Me falto hacer esta aclaración/comentario en mi mail anterior...

Saludos,
Diego.-

Maxi Accotto wrote:
Diego, ojo con esto, si la tabla es muy grande puedes tener serios problemas en hacer esta operatoria porque el EM no hace magia sino que hace lo que yo indique en los pasos anteriores y esto va a demorar segun el tamaño de la tabla, puede ser tan malo que hasta podria hacer colgar al servidor.

El día 12/10/06, Diego Campos < [EMAIL PROTECTED]> escribió:
En el Enterprise Manager, lo podes hacer.. posicionate sobre la columna que quedaria a continuación de la nueva columna.
boton derecho del mouse y Add Column

Del resto se encarga el SQL Server.

Diego.-


Maxi Accotto wrote:
Hola, a ver, primero te diria que las posiciones de las columnas no deberian importante en lo absoluto y que si estas preocupado por eso puede ser por algun acostumbramiento o bien por tener algun desarrollo inadecuado que este buscando el orden,
 
De tsql directo no lo podes hacer, deberias para hacerlo aplicar lo mismo que hace el Managemenbt Studio
 
1) Crear una tabla temporal y pasar los datos ahi
2) Guardar todo el tema de indices y relaciones
3) Borrar la tabla
4) crarla con los campos nuevos
5) Pasarle la data y los indices
 
Esto es lo que haces si lo intentas ejecutar desde el Management studio o el viejo Entherprise manager.
 
Para que queres poner las columnas en un orden especifico?

 
El día 12/10/06, Ricci Mauro < [EMAIL PROTECTED] > escribió:

Hola gente no se si es el lugar adecuado para hacer una pregunta de este tipo pero necesito insertar una columna en una tabla en una determinada posición se puede?

 

ALTER TABLE [TABLA] ADD COLUMNA_10 BIT NULL


--
This message has been scanned for viruses and
dangerous content by MailScanner , and is
believed to be clean.



--
----------------------------------------------------
Microsoft MVP (Most Valuable Professional) SQL Server
Orador Culminis
(www.sqlgurus.org)
-------------------------------------------

--

SISTEMATICA ingenieria de software srl
Diego Campos
Pasco 1675 (2000) Rosario, Santa Fe, Argentina.
Tel./Fax: +54 (341) 485-1432 / 568-0183





--
----------------------------------------------------
Microsoft MVP (Most Valuable Professional) SQL Server
Orador Culminis
( www.sqlgurus.org)
-------------------------------------------

--

SISTEMATICA ingenieria de software srl
Diego Campos
Pasco 1675 (2000) Rosario, Santa Fe, Argentina.
Tel./Fax: +54 (341) 485-1432 / 568-0183





--
----------------------------------------------------
Microsoft MVP (Most Valuable Professional) SQL Server
Orador Culminis
(www.sqlgurus.org)
-------------------------------------------

--

SISTEMATICA ingenieria de software srl
Diego Campos
Pasco 1675 (2000) Rosario, Santa Fe, Argentina.
Tel./Fax: +54 (341) 485-1432 / 568-0183

Responder a