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

#1 Miguel Egea
14/11/2005 - 13:33 | Informe spam
Te puedes hacer un script que lo haga, y funcionará siempre que no tengas
integridad referencial pro esos valores (siendo un real es muy probable que
no exista integridar referencial por ellos).

Mira la tabla sysobjects y syscolumns, en ellas tienes el tipo de datos y
luego generate instrucciones del tipo alter table XX alter column XX

Si no lo ves claro postealo aquí y te hacemos el script.


Miguel Egea
Visita mi web http://www.portalsql.com
SQL Server MVP, Mentor
Solid Quality Learning
http://www.SolidQualityLearning.com
"Solid Quality Learning is the trusted global provider of advanced education
and solutions for the entire Microsoft database platform"


"ernessan" <ernestoARROBAbyte-factory.com> wrote in message
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
#2 Maxi
14/11/2005 - 14:53 | Informe spam
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
#3 ernessan
14/11/2005 - 17:01 | Informe spam
Muchas gracias a los dos por la ayuda..

ernessan


"Maxi" escribió en el mensaje
news:%
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
#4 Alejandro Mesa
14/11/2005 - 17:01 | Informe spam
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
#5 Maxi
14/11/2005 - 17:19 | Informe spam
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
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida