none
Msg 5074, Level 16, State 1, Line 1 RRS feed

  • Pregunta

  • Hola foro que tal, bueno una consulta.

    estoy tratando de cambiar el tipo de un campo de not null a null

    esta es la tabla

    CREATE TABLE Averia
    (
     num_averia           int  NOT NULL ,
     num_serie            int  NOT NULL ,
     id_usuario           varchar(8)  NOT NULL ,
     problema             varchar(40)  NOT NULL ,
     solucion             varchar(70)  NOT NULL ,
     hora_problema        int  NULL ,
     hora_solucion        int  NULL ,
     id_proveedor         varchar(8)  NOT NULL ,
     nom_empresa          varchar(40)  NOT NULL ,
     nom_area             varchar(20)  NOT NULL ,
     nom_sucursal         varchar(30)  NOT NULL ,
     nom_compañia         varchar(30)  NOT NULL ,
     visible              int  NULL
    )
    go

    elc ampo que quiero cambiar es   'id_proveedor'

    estoy utilizando esto:

    alter table Averia alter column id_proveedor varchar(8)
    go

    pero me manda este error:

    Msg 5074, Level 16, State 1, Line 1
    The object 'XPKAveria' is dependent on column 'id_proveedor'.
    Msg 4922, Level 16, State 9, Line 1
    ALTER TABLE ALTER COLUMN id_proveedor failed because one or more objects access this column.

     

    agradeceria si em pueden ayudar, ya que en mi aplicativo no puedo insertar una consulta por que me bota que 'id_proveedor ' esta como not null, por esoe s que quiero cambiarlo a null...

     de antemano gracias..

     

    jueves, 13 de octubre de 2011 18:33

Respuestas

  • Busca en la tabla sys.objects que tipo de objeto esta referenciando esa columna. Pudiera ser que esa columna forme parte de la clave primaria, en cuyo caso no podras cambiar la columna para que acepte la marca NULL, pues es parte de los requerimientos de una clave primaria.

    Aqui un ejemplo que reproduce el error.

    USE tempdb;
    GO
    CREATE TABLE dbo.T1 (
    c1 int NOT NULL CONSTRAINT PK_T1 PRIMARY KEY
    );
    GO
    CREATE TABLE dbo.T2 (
    c1 int NOT NULL REFERENCES dbo.T1(c1)
    );
    GO
    ALTER TABLE dbo.T1
    ALTER COLUMN c1 int NULL;
    GO
    SELECT *
    FROM sys.objects
    WHERE [name] = 'PK_T1';
    GO
    DROP TABLE dbo.T2, dbo.T1;
    GO
    
    /*
    
    Msg 5074, Level 16, State 1, Line 1
    The object 'PK_T1' is dependent on column 'c1'.
    Msg 4922, Level 16, State 9, Line 1
    ALTER TABLE ALTER COLUMN c1 failed because one or more objects access this column.
    
    */
    

     

     

     


    AMB

    Some guidelines for posting questions...

    jueves, 13 de octubre de 2011 19:52

Todas las respuestas

  • Busca en la tabla sys.objects que tipo de objeto esta referenciando esa columna. Pudiera ser que esa columna forme parte de la clave primaria, en cuyo caso no podras cambiar la columna para que acepte la marca NULL, pues es parte de los requerimientos de una clave primaria.

    Aqui un ejemplo que reproduce el error.

    USE tempdb;
    GO
    CREATE TABLE dbo.T1 (
    c1 int NOT NULL CONSTRAINT PK_T1 PRIMARY KEY
    );
    GO
    CREATE TABLE dbo.T2 (
    c1 int NOT NULL REFERENCES dbo.T1(c1)
    );
    GO
    ALTER TABLE dbo.T1
    ALTER COLUMN c1 int NULL;
    GO
    SELECT *
    FROM sys.objects
    WHERE [name] = 'PK_T1';
    GO
    DROP TABLE dbo.T2, dbo.T1;
    GO
    
    /*
    
    Msg 5074, Level 16, State 1, Line 1
    The object 'PK_T1' is dependent on column 'c1'.
    Msg 4922, Level 16, State 9, Line 1
    ALTER TABLE ALTER COLUMN c1 failed because one or more objects access this column.
    
    */
    

     

     

     


    AMB

    Some guidelines for posting questions...

    jueves, 13 de octubre de 2011 19:52
  • Hola Hunchbank gracias por responder.

     pues si efectivamente ese campo id_proveedor es una calave primaria en otra tabla  en la tabla proveedor, y esta relacionada con esta, pues creo que no se puede cambiar, asi que no queda de otras mas que agregarla en la aplicacion,...

     gracias ..

     

    viernes, 14 de octubre de 2011 16:41