none
se puede cambiar un tipo de campo numeric a tipo de campo Identity ?? RRS feed

Respuestas

  • Hola.

    La conversión como tal, esto es, con un "ALTER TABLE", no la puedes realizar.

    Debes crear otra tabla nueva y vacía, ya con la propiedad identity colocada. Te diría que de paso emplees el tipo de dato "int", y no un numeric(9,0), que es más grande, aunque ello quizá repercuta en otras tablas de tu modelo, por la integridad referencial. Después, vuelcas los datos con una sentencia insert..select, conservando o no el valor original del campo TB_Mat_IdDocente. Si quieres conservarlo, coloca "set identity_insert TuNuevaTabla on" al principio del insert.. select y "set identity_insert TuNuevaTabla off" al final. Por último renombras la tabla original (o la borras) y le das el nombre TB_Mat_DatDocente a la recién creada y cargada.

    Esto mismo es lo que se realizaría si lo haces desde Management Studio (se borraría la tabla y se volvería a crear), pero puede que ello te acarree algún contratiempo, en función de los registros que tenga la tabla (si es muy grande) y de cómo tengas configurado el SSMS (por defecto, no puedes realizar cambios de estructura que impliquen la recreación de tablas).

    Si no lo logras o no sabes cómo, nos dices.


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.com
    Sígueme en twitter en http://twitter.com/qwalgrande

    sábado, 8 de diciembre de 2012 14:17
    Moderador

Todas las respuestas

  • Hola andres2507...

    Es correcto, puedes convertirlo, siempre y cuando no tengas datos repetidos

    lo has intentado  ?? te genera algún error ?

    SALUDOS!


    Sergio Sánchez Arias

    miércoles, 21 de noviembre de 2012 19:31
  • es mi codigo de la tabla

     CREATE TABLE TB_Mae_DatDocente
      (
       TB_Mae_DatIdDocente   NUMERIC (9,0) NOT NULL ,  este es el campo que lo quiero modificar a Identity
       TB_Mae_DatDpto        VARCHAR (2)    NOT NULL ,    
       TB_Mae_DatProv        VARCHAR (2)    NOT NULL ,    
       TB_Mae_DatDistrito    VARCHAR (6)    NOT NULL ,    
       TB_Mae_DatTipDocum    VARCHAR (2)    NOT NULL ,
       TB_Mae_DatSituacion   VARCHAR (3)    NOT NULL ,    
       TB_Mae_DatCategoria   VARCHAR (4)    NOT NULL ,
       TB_Mae_DatNroDocent   NUMERIC (9,0)  NOT NULL ,   
       TB_Mae_DatNombres     VARCHAR (30)            ,
       TB_Mae_DatApellPat    VARCHAR (30)            ,
       TB_Mae_DatApellMat    VARCHAR (30)            ,  
       TB_Mae_Datdireccion   VARCHAR (60)            ,
       TB_Mae_DatTelefonoF   VARCHAR (10)            ,
       TB_Mae_DatCelular     VARCHAR (10)            ,
       TB_Mae_Datmail_1      VARCHAR (30)            ,
       TB_Mae_Datmail_2      VARCHAR (30)            ,
       TB_Mae_DatSexo        VARCHAR (1)             ,
       TB_Mae_DatFechaNac    VARCHAR (8)             ,
       TB_Mae_DatEdad        NUMERIC (3,0)           ,
       TB_Mae_DatNroDocum    NUMERIC (15,0)          ,
       TB_Mae_DatFoto        IMAGE
       );
    ALTER TABLE TB_Mae_DatDocente
      ADD CONSTRAINT Pk_IdDocente PRIMARY KEY (TB_Mae_DatIdDocente),
          CONSTRAINT Fk_IDDoceUbi FOREIGN KEY (TB_mae_DatDpto, TB_Mae_DatProv, TB_Mae_DatDistrito )
                                  REFERENCES   TB_Mae_Ubigeo(TB_Mae_UbCodDpto, TB_Mae_UbCodProv, TB_Mae_UbCodDsto),
          CONSTRAINT Fk_IDDoceTD  FOREIGN KEY (TB_Mae_DatTipDocum)                                                                            
                                  REFERENCES TB_Mae_Documento(TB_Mae_DocTipo),
          CONSTRAINT Fk_IDDocSitu FOREIGN KEY (TB_Mae_DatSituacion)                                                                            
                                  REFERENCES TB_Mae_Situacion(TB_Mae_Situacion),
          CONSTRAINT Fk_IDDoceCC  FOREIGN KEY (TB_Mae_DatCategoria)                                                                            
                                  REFERENCES TB_Mae_Categoria(TB_Mae_CatCodigo);

    no hay ningun campo que se repita

    miércoles, 21 de noviembre de 2012 19:45
  • Puedes hacerlo de dos maneras:

    1.- Modificar la propiedad IS IDENTITY a TRUE, IDENTITY INCREMENT en 1 y el IDENTITY SEED el número a partir del cual comenzará a hacer el autoincrementable, es decir si por ejemplo tu valor máximo que tiene en tu campo es de 589, a esta propiedad debes ponerle 590 para que el próximo registro en insertarse contenga el 590.

    2.- Solamente setear a TRUE la propiedad IS IDENTITY a TRUE y dejar las otras dos propiedades con 1 y 1, y después utilizar un 

    DBCC CHECKIDENT ( tuTabla, reseed, 589)

    En este caso, el número que pondrás será el valor máximo que tengas en tu campo...

    Espero haberte ayudado...

    SALUDOS!


    Sergio Sánchez Arias

    miércoles, 21 de noviembre de 2012 20:54
  • Hola.

    La conversión como tal, esto es, con un "ALTER TABLE", no la puedes realizar.

    Debes crear otra tabla nueva y vacía, ya con la propiedad identity colocada. Te diría que de paso emplees el tipo de dato "int", y no un numeric(9,0), que es más grande, aunque ello quizá repercuta en otras tablas de tu modelo, por la integridad referencial. Después, vuelcas los datos con una sentencia insert..select, conservando o no el valor original del campo TB_Mat_IdDocente. Si quieres conservarlo, coloca "set identity_insert TuNuevaTabla on" al principio del insert.. select y "set identity_insert TuNuevaTabla off" al final. Por último renombras la tabla original (o la borras) y le das el nombre TB_Mat_DatDocente a la recién creada y cargada.

    Esto mismo es lo que se realizaría si lo haces desde Management Studio (se borraría la tabla y se volvería a crear), pero puede que ello te acarree algún contratiempo, en función de los registros que tenga la tabla (si es muy grande) y de cómo tengas configurado el SSMS (por defecto, no puedes realizar cambios de estructura que impliquen la recreación de tablas).

    Si no lo logras o no sabes cómo, nos dices.


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.com
    Sígueme en twitter en http://twitter.com/qwalgrande

    sábado, 8 de diciembre de 2012 14:17
    Moderador