Eliminar una columna que tenga un DEFAULT

12/02/2005 - 22:57 por Jose | Informe spam
Veo que al tratar de eliminar una columna de una tabla con ALTER TABLE no me
lo permite eliminarla si esta columna tiene un DEFAULT en su definicion.
Que debo hacer para poder eliminarla aún así ? o lo que es lo mismo, como
puedo eliminar el default de la columna por T-SQL ?

Gracias

Jose Alberto

Preguntas similare

Leer las respuestas

#1 Gustavo Larriera [MVP]
12/02/2005 - 23:49 | Informe spam
Puedes usar DROP DEFAULT para eliminar el default de la columna.

Gustavo Larriera, MVP
Uruguay LatAm
http://sqljunkies.com/weblog/gux/
Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga ningun
derecho / This posting is provided "AS IS" with no warranties, and
confers no rights.



"Jose" wrote in message
news::
Veo que al tratar de eliminar una columna de una tabla con ALTER TABLE no
me
lo permite eliminarla si esta columna tiene un DEFAULT en su definicion.
Que debo hacer para poder eliminarla aún así ? o lo que es lo mismo,
como
puedo eliminar el default de la columna por T-SQL ?

Gracias

Jose Alberto
Respuesta Responder a este mensaje
#2 Jose
13/02/2005 - 00:16 | Informe spam
Gracias pero... cómo sé el nombre del default ? SQL server le asigna un
nombre al azar. Que por cierto no sé el por qué de esta limitante que me
parece absurda.


"Gustavo Larriera [MVP]" wrote in message
news:%
Puedes usar DROP DEFAULT para eliminar el default de la columna.

Gustavo Larriera, MVP
Uruguay LatAm
http://sqljunkies.com/weblog/gux/
Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga ningun
derecho / This posting is provided "AS IS" with no warranties, and
confers no rights.



"Jose" wrote in message
news::
> Veo que al tratar de eliminar una columna de una tabla con ALTER TABLE


no
> me
> lo permite eliminarla si esta columna tiene un DEFAULT en su definicion.
> Que debo hacer para poder eliminarla aún así ? o lo que es lo mismo,
> como
> puedo eliminar el default de la columna por T-SQL ?
>
> Gracias
>
> Jose Alberto

Respuesta Responder a este mensaje
#3 Alejandro Mesa
14/02/2005 - 17:13 | Informe spam
Jose,

Si creastes el "default constraint" usando la manera mas comun:

create table table_name(
nombre_de_la_columna tipo_de_dato default(...),
...
)

entonces puedes usar la sentencia "ALTER TABLE nombre_tabla DROP CONSTRAINT
..." para eliminar el constraint y despues eliminar la columna. Como puedes
saber el nombre del constraint?, pues puedes usar la tabla de systema
sysobjects y filtrar por el nombre de la tabla, nombre de columna y xtype =
'D' (default constraint).

Tambien pudieras asignarle un nombre al default constraint cuando crees la
tabla, asi podras ver en el script o diccionario de datos, el nombre que le
distes.

Si el default constraint fue creado usando CREATE DEFAULT and sp_bindefault,
entonces debes usar sp_unbindefault para eliminar la referencia y luego
podras eliminar la columna.

Ejemplo:

use northwind
go

create table t (
colA int,
colB varchar(25) default ('valor por defecto')
)
go

declare @sql nvarchar(4000)
declare @cnstname sysname

select
@cnstname = [name]
from
sysobjects as so
where
xtype = 'D'
and parent_obj = object_id('dbo.t')
and col_name(parent_obj, info) = 'colB'

if @cnstname is not null
begin
set @sql = N'alter table dbo.t drop constraint ' + @cnstname
execute sp_executesql @sql
end
go

alter table dbo.t
drop column colB
go

alter table dbo.t
add colB varchar(25)
go

alter table dbo.t
add constraint df_t_colB default ('valor por defecto') for colB with values
go

alter table dbo.t
drop constraint df_t_colB
go

alter table dbo.t
drop column colB
go

alter table dbo.t
add colB varchar(25)
go

create default df_t_colB as 'valor por defecto'
go

execute sp_bindefault df_t_colB, 't.colB'
go

execute sp_unbindefault 't.colB'
go

drop table dbo.t
go


AMB

"Jose" wrote:

Veo que al tratar de eliminar una columna de una tabla con ALTER TABLE no me
lo permite eliminarla si esta columna tiene un DEFAULT en su definicion.
Que debo hacer para poder eliminarla aún así ? o lo que es lo mismo, como
puedo eliminar el default de la columna por T-SQL ?

Gracias

Jose Alberto



Respuesta Responder a este mensaje
#4 Alejandro Mesa
14/02/2005 - 17:13 | Informe spam
Me falto borrar el default creado con CREATE DEFAULT.

...
drop default df_t_colB
go

drop table dbo.t
go


AMB

"Alejandro Mesa" wrote:

Jose,

Si creastes el "default constraint" usando la manera mas comun:

create table table_name(
nombre_de_la_columna tipo_de_dato default(...),
...
)

entonces puedes usar la sentencia "ALTER TABLE nombre_tabla DROP CONSTRAINT
..." para eliminar el constraint y despues eliminar la columna. Como puedes
saber el nombre del constraint?, pues puedes usar la tabla de systema
sysobjects y filtrar por el nombre de la tabla, nombre de columna y xtype =
'D' (default constraint).

Tambien pudieras asignarle un nombre al default constraint cuando crees la
tabla, asi podras ver en el script o diccionario de datos, el nombre que le
distes.

Si el default constraint fue creado usando CREATE DEFAULT and sp_bindefault,
entonces debes usar sp_unbindefault para eliminar la referencia y luego
podras eliminar la columna.

Ejemplo:

use northwind
go

create table t (
colA int,
colB varchar(25) default ('valor por defecto')
)
go

declare @sql nvarchar(4000)
declare @cnstname sysname

select
@cnstname = [name]
from
sysobjects as so
where
xtype = 'D'
and parent_obj = object_id('dbo.t')
and col_name(parent_obj, info) = 'colB'

if @cnstname is not null
begin
set @sql = N'alter table dbo.t drop constraint ' + @cnstname
execute sp_executesql @sql
end
go

alter table dbo.t
drop column colB
go

alter table dbo.t
add colB varchar(25)
go

alter table dbo.t
add constraint df_t_colB default ('valor por defecto') for colB with values
go

alter table dbo.t
drop constraint df_t_colB
go

alter table dbo.t
drop column colB
go

alter table dbo.t
add colB varchar(25)
go

create default df_t_colB as 'valor por defecto'
go

execute sp_bindefault df_t_colB, 't.colB'
go

execute sp_unbindefault 't.colB'
go

drop table dbo.t
go


AMB

"Jose" wrote:

> Veo que al tratar de eliminar una columna de una tabla con ALTER TABLE no me
> lo permite eliminarla si esta columna tiene un DEFAULT en su definicion.
> Que debo hacer para poder eliminarla aún así ? o lo que es lo mismo, como
> puedo eliminar el default de la columna por T-SQL ?
>
> Gracias
>
> Jose Alberto
>
>
>
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida