Cambiar el tipo de Dato de Todas la tablas de una BD

29/06/2006 - 18:05 por Gina Paola Cardoso | Informe spam
Hola!

Llevo varios día tratando de buscar información, pero no encontrado nada,
actualmente tengo una BD, de aproximadamente 350 tablas con 1800
procedimientos almacenados, es necesario que todos lo tipos de datos int,
sean cambiados por float, de una maneja agil. Pienso que hacerlo manual, es
una tarea muy tediosa, por ello quisiera saber como modificar ese tipo de
datos, tanto en tablas con en procedimiento de manera agil y segura.

Agradeciendole la atención prestada,

Gina Paola Cardoso Sandoval

Preguntas similare

Leer las respuestas

#1 Maxi
29/06/2006 - 18:08 | Informe spam
Hola Paola, una manera es por codigo TSQL, como?

Vas a tener que armar un cursor sobre la consulta: SELECT
TABLE_NAME,COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS

Luego recorrer esos resultados y con sql-dinamico (sp_executesql) hacer el
alter de cada tabla y campo que has obtenido del cursor. Si me das hasta la
noche te armo el codigo si es que no te das cuenta como hacerlo


Salu2
Maxi [MVP SQL SERVER]
www.sqlgurus.org


"Gina Paola Cardoso" escribió
en el mensaje news:
Hola!

Llevo varios día tratando de buscar información, pero no encontrado nada,
actualmente tengo una BD, de aproximadamente 350 tablas con 1800
procedimientos almacenados, es necesario que todos lo tipos de datos int,
sean cambiados por float, de una maneja agil. Pienso que hacerlo manual,
es
una tarea muy tediosa, por ello quisiera saber como modificar ese tipo de
datos, tanto en tablas con en procedimiento de manera agil y segura.

Agradeciendole la atención prestada,

Gina Paola Cardoso Sandoval
Respuesta Responder a este mensaje
#2 Alejandro Mesa
29/06/2006 - 18:55 | Informe spam
Gina,

Cambiar el tipo de dato en todas las tablas no sera facil, sobre todo si
tienes restricciones de clave foranea y/o clave primaria, indices asociados a
las columnas en question, etc.

Mira este ejemplo simple:

create table dbo.t1 (
c1 int primary key
)
go

alter table dbo.t1
alter column c1 float
go

drop table dbo.t1
go

Resultado:

Server: Msg 5074, Level 16, State 8, Line 2
The object 'PK__t1__40058253' is dependent on column 'c1'.
Server: Msg 4922, Level 16, State 1, Line 2
ALTER TABLE ALTER COLUMN c1 failed because one or more objects access this
column.

Como ves debes primero eliminar la restriccion de clave primaria, alterar la
tabla - columna y luego recrear la restriccion.

create table dbo.t1 (
c1 int not null constraint pk_t1 primary key
)
go

alter table dbo.t1
drop constraint pk_t1
go

alter table dbo.t1
alter column c1 float not null
go

alter table dbo.t1
add constraint pk_t1 primary key (c1 asc)
go

drop table dbo.t1
go

Que pasa se existe alguna restriccion de clave foranea que referencia esa
clave primaria?

Primero tendras que eliminar las restricciones de clave foranea que la
referencien, eliminar la restriccion de clave primaria, alter la tabla -
columna y luegooo volver a recrear las restricciones.

En cuanto a los procedimientos almacenados (drop y create), te recomiendo
que crees el script de todos ellos desde EM y copies el script hacia un buen
editor de texto en el cual podras reemplazar los parametros y/o declaraciones
de [int] hacia [float]. Esto tampoco sera facil.

Me pregunto a que se debe ese cambio, sabes que float no es recomendado para
claves primarias o unique y que el valor que se almacena en este tipo de
columnas es aproximado?


AMB

"Gina Paola Cardoso" wrote:

Hola!

Llevo varios día tratando de buscar información, pero no encontrado nada,
actualmente tengo una BD, de aproximadamente 350 tablas con 1800
procedimientos almacenados, es necesario que todos lo tipos de datos int,
sean cambiados por float, de una maneja agil. Pienso que hacerlo manual, es
una tarea muy tediosa, por ello quisiera saber como modificar ese tipo de
datos, tanto en tablas con en procedimiento de manera agil y segura.

Agradeciendole la atención prestada,

Gina Paola Cardoso Sandoval
Respuesta Responder a este mensaje
#3 Alejandro Mesa
29/06/2006 - 19:01 | Informe spam
Me olvide poner un ejemplo de lo que pudiera ocurrir cuando usamos el tipo de
dato [float] en una columna que es parte de la clave primaria o restriccion
unique.

use northwind
go

create table dbo.t1 (
c1 float not null constraint pk_t1 primary key
)
go

insert into dbo.t1 values(0.93000000000000005)
insert into dbo.t1 values(.93)
go

select * from dbo.t1
go

drop table dbo.t1
go

Resultado:


(1 row(s) affected)

Server: Msg 2627, Level 14, State 1, Line 1
Violation of PRIMARY KEY constraint 'pk_t1'. Cannot insert duplicate key in
object 't1'.
The statement has been terminated.

(1 row(s) affected)


AMB


"Alejandro Mesa" wrote:

Gina,

Cambiar el tipo de dato en todas las tablas no sera facil, sobre todo si
tienes restricciones de clave foranea y/o clave primaria, indices asociados a
las columnas en question, etc.

Mira este ejemplo simple:

create table dbo.t1 (
c1 int primary key
)
go

alter table dbo.t1
alter column c1 float
go

drop table dbo.t1
go

Resultado:

Server: Msg 5074, Level 16, State 8, Line 2
The object 'PK__t1__40058253' is dependent on column 'c1'.
Server: Msg 4922, Level 16, State 1, Line 2
ALTER TABLE ALTER COLUMN c1 failed because one or more objects access this
column.

Como ves debes primero eliminar la restriccion de clave primaria, alterar la
tabla - columna y luego recrear la restriccion.

create table dbo.t1 (
c1 int not null constraint pk_t1 primary key
)
go

alter table dbo.t1
drop constraint pk_t1
go

alter table dbo.t1
alter column c1 float not null
go

alter table dbo.t1
add constraint pk_t1 primary key (c1 asc)
go

drop table dbo.t1
go

Que pasa se existe alguna restriccion de clave foranea que referencia esa
clave primaria?

Primero tendras que eliminar las restricciones de clave foranea que la
referencien, eliminar la restriccion de clave primaria, alter la tabla -
columna y luegooo volver a recrear las restricciones.

En cuanto a los procedimientos almacenados (drop y create), te recomiendo
que crees el script de todos ellos desde EM y copies el script hacia un buen
editor de texto en el cual podras reemplazar los parametros y/o declaraciones
de [int] hacia [float]. Esto tampoco sera facil.

Me pregunto a que se debe ese cambio, sabes que float no es recomendado para
claves primarias o unique y que el valor que se almacena en este tipo de
columnas es aproximado?


AMB

"Gina Paola Cardoso" wrote:

> Hola!
>
> Llevo varios día tratando de buscar información, pero no encontrado nada,
> actualmente tengo una BD, de aproximadamente 350 tablas con 1800
> procedimientos almacenados, es necesario que todos lo tipos de datos int,
> sean cambiados por float, de una maneja agil. Pienso que hacerlo manual, es
> una tarea muy tediosa, por ello quisiera saber como modificar ese tipo de
> datos, tanto en tablas con en procedimiento de manera agil y segura.
>
> Agradeciendole la atención prestada,
>
> Gina Paola Cardoso Sandoval
Respuesta Responder a este mensaje
#4 Gina Paola Cardoso
30/06/2006 - 17:31 | Informe spam
Hola Alejandro Muchas Gracias!

Realmente el Cambio se da por que el programa que va a mostrar los datos al
usuario, maneja solo float y es imposible cambiar, así que nos toca hacer el
cambio a nivel de BD, queremos hacer los cambios de la manera más automatica
posible, para evitar erores. Muchas Gracias

Gina Paola Cardoso Sandoval


"Alejandro Mesa" wrote:

Gina,

Cambiar el tipo de dato en todas las tablas no sera facil, sobre todo si
tienes restricciones de clave foranea y/o clave primaria, indices asociados a
las columnas en question, etc.

Mira este ejemplo simple:

create table dbo.t1 (
c1 int primary key
)
go

alter table dbo.t1
alter column c1 float
go

drop table dbo.t1
go

Resultado:

Server: Msg 5074, Level 16, State 8, Line 2
The object 'PK__t1__40058253' is dependent on column 'c1'.
Server: Msg 4922, Level 16, State 1, Line 2
ALTER TABLE ALTER COLUMN c1 failed because one or more objects access this
column.

Como ves debes primero eliminar la restriccion de clave primaria, alterar la
tabla - columna y luego recrear la restriccion.

create table dbo.t1 (
c1 int not null constraint pk_t1 primary key
)
go

alter table dbo.t1
drop constraint pk_t1
go

alter table dbo.t1
alter column c1 float not null
go

alter table dbo.t1
add constraint pk_t1 primary key (c1 asc)
go

drop table dbo.t1
go

Que pasa se existe alguna restriccion de clave foranea que referencia esa
clave primaria?

Primero tendras que eliminar las restricciones de clave foranea que la
referencien, eliminar la restriccion de clave primaria, alter la tabla -
columna y luegooo volver a recrear las restricciones.

En cuanto a los procedimientos almacenados (drop y create), te recomiendo
que crees el script de todos ellos desde EM y copies el script hacia un buen
editor de texto en el cual podras reemplazar los parametros y/o declaraciones
de [int] hacia [float]. Esto tampoco sera facil.

Me pregunto a que se debe ese cambio, sabes que float no es recomendado para
claves primarias o unique y que el valor que se almacena en este tipo de
columnas es aproximado?


AMB

"Gina Paola Cardoso" wrote:

> Hola!
>
> Llevo varios día tratando de buscar información, pero no encontrado nada,
> actualmente tengo una BD, de aproximadamente 350 tablas con 1800
> procedimientos almacenados, es necesario que todos lo tipos de datos int,
> sean cambiados por float, de una maneja agil. Pienso que hacerlo manual, es
> una tarea muy tediosa, por ello quisiera saber como modificar ese tipo de
> datos, tanto en tablas con en procedimiento de manera agil y segura.
>
> Agradeciendole la atención prestada,
>
> Gina Paola Cardoso Sandoval
Respuesta Responder a este mensaje
#5 Gina Paola Cardoso
30/06/2006 - 17:33 | Informe spam
Hola!

Muchas Gracias
Gina Paola Cardoso Sandoval


"Maxi" wrote:

Hola Paola, una manera es por codigo TSQL, como?

Vas a tener que armar un cursor sobre la consulta: SELECT
TABLE_NAME,COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS

Luego recorrer esos resultados y con sql-dinamico (sp_executesql) hacer el
alter de cada tabla y campo que has obtenido del cursor. Si me das hasta la
noche te armo el codigo si es que no te das cuenta como hacerlo


Salu2
Maxi [MVP SQL SERVER]
www.sqlgurus.org


"Gina Paola Cardoso" escribió
en el mensaje news:
> Hola!
>
> Llevo varios día tratando de buscar información, pero no encontrado nada,
> actualmente tengo una BD, de aproximadamente 350 tablas con 1800
> procedimientos almacenados, es necesario que todos lo tipos de datos int,
> sean cambiados por float, de una maneja agil. Pienso que hacerlo manual,
> es
> una tarea muy tediosa, por ello quisiera saber como modificar ese tipo de
> datos, tanto en tablas con en procedimiento de manera agil y segura.
>
> Agradeciendole la atención prestada,
>
> Gina Paola Cardoso Sandoval



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