Modificar Campos de Tabla

14/11/2005 - 13:23 por ernessan | Informe spam
Hola a todos,

Necesitaria cambiar de toda una base de datos todos los campos de tipo real
a numeric??

existe alguna manera de hacerlo automaticamentes sin entrar a modificar
campo a campo de cada tabla??

Muchas Gracias.


Ernessan

Preguntas similare

Leer las respuestas

#6 Alejandro Mesa
14/11/2005 - 18:17 | Informe spam
Maxi,

No he dicho raro, dije conflictivo. Tenemos la posibilidad de usar el
caracter de espacio en el nombre de las columnas y / o tablas. No que esto
sea un tabu, pero puede darse el caso.

Gracias Ale!! lo que pasa que yo no uso caracteres raros ;-)



Yo tampoco, pero fijate que Microsoft si. El ejemplo que expuse fue usando
la tabla [order details] de la db northwind, que es una de las db de ejemplo
mas usada.


AMB

"Maxi" wrote:

Gracias Ale!! lo que pasa que yo no uso caracteres raros ;-)


Salu2
Maxi [MVP SQL SERVER]


"Alejandro Mesa" escribió en el
mensaje news:
> Maxi,
>
> Te recomiendo usar la funcion "quotename" para concatenar el nombre de la
> tabla y de la columna en el procedimeinto almacenado, pues si la
> tabla/columna tiene espacios u otros caracteres conflictivos, el sp puede
> generar una sentencia dinamica con identificadores no permitidos. Fijate
> en
> el ejemplo:
>
> use northwind
> go
>
> select *
> into [order details tmp]
> from [order details]
> go
>
> CREATE PROC GEN_ALTER_TABLE @TABLE_NAME VARCHAR(500) AS
> DECLARE @TEXTO VARCHAR(100)
> DECLARE @FINAL VARCHAR(300)
>
> SET @TEXTO = 'ALTER TABLE ' + @TABLE_NAME + ' ALTER COLUMN '
>
> DECLARE @COLUMN_NAME VARCHAR(300)
> DECLARE @DATA_TYPE VARCHAR(100)
>
> DECLARE micursor CURSOR LOCAL FORWARD_ONLY
>
> FOR SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS
> WHERE TABLE_NAME=@TABLE_NAME AND DATA_TYPE='int'
>
> OPEN MICURSOR
> FETCH NEXT FROM MICURSOR
> INTO @COLUMN_NAME
>
> WHILE @@FETCH_STATUS = 0
>
> BEGIN
>
> SET @FINAL = @TEXTO + @COLUMN_NAME + ' REAL '
>
> EXEC(@FINAL) -- EJECUTAMOS SQL-DINAMICO
>
> FETCH NEXT FROM MICURSOR
> INTO @COLUMN_NAME
>
> END
>
> GO
>
> EXEC GEN_alter_table 'order details tmp'
> go
>
> Result:
>
> Server: Msg 156, Level 15, State 1, Line 1
> Incorrect syntax near the keyword 'order'.
> Server: Msg 156, Level 15, State 1, Line 1
> Incorrect syntax near the keyword 'order'.
>
> Cambiemos el procedimiento:
>
> alter PROC GEN_ALTER_TABLE @TABLE_NAME VARCHAR(500) AS
> DECLARE @TEXTO VARCHAR(100)
> DECLARE @FINAL VARCHAR(300)
>
> SET @TEXTO = 'ALTER TABLE ' + quotename(@TABLE_NAME) + ' ALTER COLUMN '
>
> DECLARE @COLUMN_NAME VARCHAR(300)
> DECLARE @DATA_TYPE VARCHAR(100)
>
> DECLARE micursor CURSOR LOCAL FORWARD_ONLY
>
> FOR SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS
> WHERE TABLE_NAME=@TABLE_NAME AND DATA_TYPE='int'
>
> OPEN MICURSOR
> FETCH NEXT FROM MICURSOR
> INTO @COLUMN_NAME
>
> WHILE @@FETCH_STATUS = 0
>
> BEGIN
>
> SET @FINAL = @TEXTO + quotename(@COLUMN_NAME) + ' REAL '
>
> EXEC(@FINAL) -- EJECUTAMOS SQL-DINAMICO
>
> FETCH NEXT FROM MICURSOR
> INTO @COLUMN_NAME
>
> END
>
> GO
>
> EXEC GEN_alter_table 'order details tmp'
> go
>
> exec sp_help 'order details tmp'
> go
>
> DROP PROC GEN_alter_table
> go
>
> drop table [order details tmp]
> go
>
>
> AMB
>
> "Maxi" wrote:
>
>> Hola, te paso un Script que me arme hace un tiempito:
>>
>> USE NORTHWIND
>> GO
>>
>>
>>
>> CREATE TABLE PEPE1 (ID INT, FECHA DATETIME,NUMERO INT)
>>
>> ALTER TABLE PEPE1
>> ALTER COLUMN ID REAL
>>
>> SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='PEPE1'
>>
>> DROP PROC GEN_alter_table
>>
>> CREATE PROC GEN_ALTER_TABLE @TABLE_NAME VARCHAR(500) AS
>> DECLARE @TEXTO VARCHAR(100)
>> DECLARE @FINAL VARCHAR(300)
>>
>> SET @TEXTO = 'ALTER TABLE ' + @TABLE_NAME + ' ALTER COLUMN '
>>
>> DECLARE @COLUMN_NAME VARCHAR(300)
>> DECLARE @DATA_TYPE VARCHAR(100)
>>
>> DECLARE micursor CURSOR LOCAL FORWARD_ONLY
>>
>> FOR SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS
>> WHERE TABLE_NAME=@TABLE_NAME AND DATA_TYPE='int'
>>
>> OPEN MICURSOR
>> FETCH NEXT FROM MICURSOR
>> INTO @COLUMN_NAME
>>
>> WHILE @@FETCH_STATUS = 0
>>
>> BEGIN
>>
>> SET @FINAL = @TEXTO + @COLUMN_NAME + ' REAL '
>>
>> EXEC(@FINAL) -- EJECUTAMOS SQL-DINAMICO
>>
>> FETCH NEXT FROM MICURSOR
>> INTO @COLUMN_NAME
>>
>> END
>>
>> GO
>>
>>
>> EXEC GEN_alter_table 'PEPE1'
>>
>> SP_HELP PEPE1
>>
>>
>>
>>
>>
>>
>> pd: solo debes hacer un cursor para que se recorran tabla a tabla (lo
>> sacas
>> de INFORMACION_SCHEMA.TABLES)
>> y ejecute el sp
>>
>> Espero te sea util
>>
>>
>>
>> Salu2
>> Maxi [MVP SQL SERVER]
>>
>>
>> "ernessan" <ernestoARROBAbyte-factory.com> escribió en el mensaje
>> news:ec$
>> > Hola a todos,
>> >
>> > Necesitaria cambiar de toda una base de datos todos los campos de tipo
>> > real
>> > a numeric??
>> >
>> > existe alguna manera de hacerlo automaticamentes sin entrar a modificar
>> > campo a campo de cada tabla??
>> >
>> > Muchas Gracias.
>> >
>> >
>> > Ernessan
>> >
>> >
>> >
>>
>>
>>



Respuesta Responder a este mensaje
#7 Maxi
14/11/2005 - 18:38 | Informe spam
jaja, estos chichos de MS!!! le vamos a tener que enseñar :-)))

Un abrazo y gracias nuevamente!!


Salu2
Maxi [MVP SQL SERVER]


"Alejandro Mesa" escribió en el
mensaje news:
Maxi,

No he dicho raro, dije conflictivo. Tenemos la posibilidad de usar el
caracter de espacio en el nombre de las columnas y / o tablas. No que esto
sea un tabu, pero puede darse el caso.

Gracias Ale!! lo que pasa que yo no uso caracteres raros ;-)



Yo tampoco, pero fijate que Microsoft si. El ejemplo que expuse fue usando
la tabla [order details] de la db northwind, que es una de las db de
ejemplo
mas usada.


AMB

"Maxi" wrote:

Gracias Ale!! lo que pasa que yo no uso caracteres raros ;-)


Salu2
Maxi [MVP SQL SERVER]


"Alejandro Mesa" escribió en el
mensaje news:
> Maxi,
>
> Te recomiendo usar la funcion "quotename" para concatenar el nombre de
> la
> tabla y de la columna en el procedimeinto almacenado, pues si la
> tabla/columna tiene espacios u otros caracteres conflictivos, el sp
> puede
> generar una sentencia dinamica con identificadores no permitidos.
> Fijate
> en
> el ejemplo:
>
> use northwind
> go
>
> select *
> into [order details tmp]
> from [order details]
> go
>
> CREATE PROC GEN_ALTER_TABLE @TABLE_NAME VARCHAR(500) AS
> DECLARE @TEXTO VARCHAR(100)
> DECLARE @FINAL VARCHAR(300)
>
> SET @TEXTO = 'ALTER TABLE ' + @TABLE_NAME + ' ALTER COLUMN '
>
> DECLARE @COLUMN_NAME VARCHAR(300)
> DECLARE @DATA_TYPE VARCHAR(100)
>
> DECLARE micursor CURSOR LOCAL FORWARD_ONLY
>
> FOR SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS
> WHERE TABLE_NAME=@TABLE_NAME AND DATA_TYPE='int'
>
> OPEN MICURSOR
> FETCH NEXT FROM MICURSOR
> INTO @COLUMN_NAME
>
> WHILE @@FETCH_STATUS = 0
>
> BEGIN
>
> SET @FINAL = @TEXTO + @COLUMN_NAME + ' REAL '
>
> EXEC(@FINAL) -- EJECUTAMOS SQL-DINAMICO
>
> FETCH NEXT FROM MICURSOR
> INTO @COLUMN_NAME
>
> END
>
> GO
>
> EXEC GEN_alter_table 'order details tmp'
> go
>
> Result:
>
> Server: Msg 156, Level 15, State 1, Line 1
> Incorrect syntax near the keyword 'order'.
> Server: Msg 156, Level 15, State 1, Line 1
> Incorrect syntax near the keyword 'order'.
>
> Cambiemos el procedimiento:
>
> alter PROC GEN_ALTER_TABLE @TABLE_NAME VARCHAR(500) AS
> DECLARE @TEXTO VARCHAR(100)
> DECLARE @FINAL VARCHAR(300)
>
> SET @TEXTO = 'ALTER TABLE ' + quotename(@TABLE_NAME) + ' ALTER COLUMN
> '
>
> DECLARE @COLUMN_NAME VARCHAR(300)
> DECLARE @DATA_TYPE VARCHAR(100)
>
> DECLARE micursor CURSOR LOCAL FORWARD_ONLY
>
> FOR SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS
> WHERE TABLE_NAME=@TABLE_NAME AND DATA_TYPE='int'
>
> OPEN MICURSOR
> FETCH NEXT FROM MICURSOR
> INTO @COLUMN_NAME
>
> WHILE @@FETCH_STATUS = 0
>
> BEGIN
>
> SET @FINAL = @TEXTO + quotename(@COLUMN_NAME) + ' REAL '
>
> EXEC(@FINAL) -- EJECUTAMOS SQL-DINAMICO
>
> FETCH NEXT FROM MICURSOR
> INTO @COLUMN_NAME
>
> END
>
> GO
>
> EXEC GEN_alter_table 'order details tmp'
> go
>
> exec sp_help 'order details tmp'
> go
>
> DROP PROC GEN_alter_table
> go
>
> drop table [order details tmp]
> go
>
>
> AMB
>
> "Maxi" wrote:
>
>> Hola, te paso un Script que me arme hace un tiempito:
>>
>> USE NORTHWIND
>> GO
>>
>>
>>
>> CREATE TABLE PEPE1 (ID INT, FECHA DATETIME,NUMERO INT)
>>
>> ALTER TABLE PEPE1
>> ALTER COLUMN ID REAL
>>
>> SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='PEPE1'
>>
>> DROP PROC GEN_alter_table
>>
>> CREATE PROC GEN_ALTER_TABLE @TABLE_NAME VARCHAR(500) AS
>> DECLARE @TEXTO VARCHAR(100)
>> DECLARE @FINAL VARCHAR(300)
>>
>> SET @TEXTO = 'ALTER TABLE ' + @TABLE_NAME + ' ALTER COLUMN '
>>
>> DECLARE @COLUMN_NAME VARCHAR(300)
>> DECLARE @DATA_TYPE VARCHAR(100)
>>
>> DECLARE micursor CURSOR LOCAL FORWARD_ONLY
>>
>> FOR SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS
>> WHERE TABLE_NAME=@TABLE_NAME AND DATA_TYPE='int'
>>
>> OPEN MICURSOR
>> FETCH NEXT FROM MICURSOR
>> INTO @COLUMN_NAME
>>
>> WHILE @@FETCH_STATUS = 0
>>
>> BEGIN
>>
>> SET @FINAL = @TEXTO + @COLUMN_NAME + ' REAL '
>>
>> EXEC(@FINAL) -- EJECUTAMOS SQL-DINAMICO
>>
>> FETCH NEXT FROM MICURSOR
>> INTO @COLUMN_NAME
>>
>> END
>>
>> GO
>>
>>
>> EXEC GEN_alter_table 'PEPE1'
>>
>> SP_HELP PEPE1
>>
>>
>>
>>
>>
>>
>> pd: solo debes hacer un cursor para que se recorran tabla a tabla (lo
>> sacas
>> de INFORMACION_SCHEMA.TABLES)
>> y ejecute el sp
>>
>> Espero te sea util
>>
>>
>>
>> Salu2
>> Maxi [MVP SQL SERVER]
>>
>>
>> "ernessan" <ernestoARROBAbyte-factory.com> escribió en el mensaje
>> news:ec$
>> > Hola a todos,
>> >
>> > Necesitaria cambiar de toda una base de datos todos los campos de
>> > tipo
>> > real
>> > a numeric??
>> >
>> > existe alguna manera de hacerlo automaticamentes sin entrar a
>> > modificar
>> > campo a campo de cada tabla??
>> >
>> > Muchas Gracias.
>> >
>> >
>> > Ernessan
>> >
>> >
>> >
>>
>>
>>



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