Constraint default

18/05/2006 - 20:52 por JUDAJIME | Informe spam
ordial saludo

Necesito, averiguar, si un campo tiene valor por defecto, si lo tienen
entonces eliminarlo. Como puedo hacer esto?

Saludos,
JUDAJIME

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
18/05/2006 - 22:04 | Informe spam
JUDAJIME,

Una columna puede tener default value por que se creo una restriccion
default o porque la columna fue ligada a un valor default mediante
sp_bindefault.

Ejemplo:

use northwind
go

create table t1 (
c1 int default(0)
)
go

select
table_name,
column_name,
column_default
from
information_schema.columns
where
table_schema = 'dbo'
and table_name = 't1'
and column_name = 'c1'
go

declare @sql nvarchar(4000)
declare @cn sysname

select
@cn = object_name(constid)
from
sysconstraints
where
[id] = object_id('dbo.t1')
and col_name([id], colid) = 'c1'
and objectproperty(constid, 'IsDefaultCnst') = 1

if not (@cn is null)
begin
set @sql = N'alter table dbo.t1 drop constraint [' + @cn + N']'
exec sp_executesql @sql
end
go

select
table_name,
column_name,
column_default
from
information_schema.columns
where
table_schema = 'dbo'
and table_name = 't1'
and column_name = 'c1'
go

create default df_uno as 1
go

exec sp_bindefault 'df_uno', 't1.c1'
go

select
table_name,
column_name,
column_default
from
information_schema.columns
where
table_schema = 'dbo'
and table_name = 't1'
and column_name = 'c1'
go

declare @sql nvarchar(4000)

set @sql = N''

select
@sql = 'exec sp_unbindefault ''' + table_name + '.' + column_name + ''''
from
information_schema.columns
where
table_schema = 'dbo'
and table_name = 't1'
and column_name = 'c1'
and column_default like '%create default %'

print @sql

if @sql is not null
exec sp_executesql @sql
go

select
table_name,
column_name,
column_default
from
information_schema.columns
where
table_schema = 'dbo'
and table_name = 't1'
and column_name = 'c1'
go

drop default df_uno
go

drop table t1
go


AMB



"JUDAJIME" wrote:

ordial saludo

Necesito, averiguar, si un campo tiene valor por defecto, si lo tienen
entonces eliminarlo. Como puedo hacer esto?

Saludos,
JUDAJIME
Respuesta Responder a este mensaje
#2 Jorge Gonzalez
19/05/2006 - 01:18 | Informe spam
Podés hacer una consulta a la meta estructura del SQL Server

con esta consulta podés ver si una columna tiene o no un default asociado y
de tenerlo también podés ver si el default es un constraint o un Default
objects

Declare @TName sysname, @CName sysname
set @TName = 'TuTabla'
set @CName = 'TuColumna'

select
o.name,
c.name,
DefaultName = (select name from sysobjects where Id = c.cdefault),
EsDefaultObj= (select case when parent_obj =0 then 'S' Else 'N' end
from sysobjects where Id = c.cdefault)
from sysobjects o inner join syscolumns c on o.id = c.id
where
c.cdefault <>0 and
o.name = @TName and
c.name = @CName

Si tu columna no tiene ningún default el script retorna vacío, pero si lo
tuviese el Script retorna el nombre del constraint y si es un default object
o un constraint
Entonces si el default es constraint tenés que ejecutar ALTER TABLE Drop
Constraint
pero si fuera un default object entonces primero tenés que desenlazarlo de
la columna con sp_unbindefault
y luego si lo requerís, borrar el constraint con DROP CONSTRAINT

Nota: no es lo más recomendable hacer consultas a la meta estructura del SQL
Server.

saludos
Jorge González


"JUDAJIME" <JUDAJIME@@discussions.microsoft.com> escribió en el mensaje
news:
ordial saludo

Necesito, averiguar, si un campo tiene valor por defecto, si lo tienen
entonces eliminarlo. Como puedo hacer esto?

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