Drop Column

30/07/2003 - 23:53 por Hernan | Informe spam
Tengo el siguiente problema:

Quiero hacer un ALTER TABLE Familiares DROP COLUMN Campo_1BIS y me tira
el siguiente error:

Servidor: mensaje 5074, nivel 16, estado 1, línea 1
objeto 'DF__Familiare__Campo__57C7FD4B' depende de columna 'Campo_1BIS'.
Servidor: mensaje 4922, nivel 16, estado 1, línea 1
Error de ALTER TABLE DROP COLUMN Campo_1BIS debido a que uno o más
objetos tienen acceso a esta columna.

Alguien sabe que puede llegar a ser esto?


Desde ya muchas gracias.

Preguntas similare

Leer las respuestas

#1 Softjaen
31/07/2003 - 00:25 | Informe spam
"Hernan" escribió:

Quiero hacer un ALTER TABLE Familiares DROP COLUMN Campo_1BIS
y me tira el siguiente error:

Error de ALTER TABLE DROP COLUMN Campo_1BIS debido a que uno o más
objetos tienen acceso a esta columna.




Hola, Hernán:

En principio, la sintaxis de la consulta SQL para eliminar el campo
«Campo_1BIS» es correcta.

Si utilizas una base de Access, ¿por casualidad tienes relacionado dicho
campo, con otro campo de cualquier tabla de la base de datos?

¿Que biblioteca de acceso a datos utilizas? ¿DAO, ADO?

Un saluido.

Enrique Martínez
[MS MVP - VB]
Respuesta Responder a este mensaje
#2 Softjaen
31/07/2003 - 02:21 | Informe spam
"Hernan" escribió:

- Estoy trabajando con SQL Server 2000.
- Para acceder a la base utilizo ADO.

- Mi idea es, desde VB, Eliminar un campo de una tabla que no esta
relacionada con ninguna otra.
Para eso utilizo la sentencia ALTER TABLE Familiares DROP COLUMN
Campo_1BIS.




Pues desconozco a qué se puede deber dicho error, porque acabo de ejecutar
una consulta de eliminación y el campo se ha eliminado de la tabla sin
ningún tipo de problemas:

Dim cnn As ADODB.Connection

Set cnn = New ADODB.Connection
With cnn
.Provider = "SQLOLEDB.1"
.ConnectionString = "Data Source=Nombre_Servidor_SQL;" & _
"Initial Catalog=Nombre_BaseDatos;User ID=Nombre_Usuario;" & _
"Password=Contraseña;"

' Abrimos la conexión
.Open

' Eliminamos el campo
.Execute "ALTER TABLE Familiares DROP COLUMN Campo_IBIS"
End With

Enrique Martínez
[MS MVP - VB]
Respuesta Responder a este mensaje
#3 Rubén Vigón
31/07/2003 - 11:35 | Informe spam
Cuando agregas una nueva columna a una tabla, el motor de SQL Server debe conocer qué valores dar en
ésta nueva columna a los registros existentes. Si la columna admite nulos, se establece NULL en
todos los registros; si la columna no admite nulos, se debe especificar un valor por defecto
(DEFAULT). Ésta especificación del valor por defecto es, en realidad, una restricción (CONSTRAINT) a
la que, si no especificamos un nombre, SQL Server asigna un nombre por defecto (en tu caso,
'DF__Familiare__Campo__57C7FD4B')

Para eliminar una columna, ésta no puede estar asociada con un valor predeterminado (por lo que
obtienes el error "objeto X depende de columna Y"). Puedes comprobar ésta asociación con la
restricción consultando los registros de la tabla «sysobjects» donde xtype='D' (ÞFAULT); por
ejemplo, para mostrar la restricción creada automáticamente por el sistema para la tabla
"Familiares":

select * from sysobjects where xtype='D' and parent_obj = (select id from sysobjects where
name='Familiares')

Solución: crear la restricción con nombre (en lugar de dejar que el sistema asigne uno por defecto)
y eliminar dicha restricción antes de eliminar la columna; por ejemplo:

CREATE TABLE Familiares (IDFam INT NOT NULL PRIMARY KEY, IDCLASE INT NOT NULL, IDOBJETO INT NOT
NULL)
ALTER TABLE Familiares ADD Nueva NVARCHAR(50) NOT NULL CONSTRAINT MiRestriccion DEFAULT N''
ALTER TABLE Familiares DROP CONSTRAINT MiRestriccion
ALTER TABLE Familiares DROP COLUMN Nueva

Un saludo!

Rubén Vigón
Microsoft MVP Visual Basic

(Guía de buen uso del foro)
http://perso.wanadoo.es/rubenvigon/foro
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida