Cómo reiniciar el valor de un campo identity de SQL Server

No replies
Imagen de carlos
Offline
Joined: 28/12/2005
Puntos: 1210

Si una tabla de SQL Server tiene un campo de tipo identidad, o identity, en un momento dado puede interesar volverlo a dejar con su valor inicial, o a otro valor que interese para que siga autoincrementándose a partir del mismo.

Con un sencillo comando DBCC se puede dejar el valor actual del campo identity al que se desee, aunque hay que tener cuidado con no utilizar un valor que al incrementarse se pueda encontrar registros que ya existan con ese valor.

Lo más habitual es utilizar este comando cuando, por ejemplo, se eliminan todos los registros de una tabla, y se quiere volver a comenzar a insertar registros identificados por el campo autoincremental a partir de un valor inicial, normalmente 0. Si se utiliza para cualquier otra cosa hay que tener cuidado con los conflictos que puedan aparecer con registros existentes en la tabla.

 
Este es el comando para inicializar a cero el valor actual del autoincremental de un campo identity de la tabla 'mi_tabla', en una base de datos SQLServer:
DBCC CHECKIDENT ('mi_tabla', RESEED,0)
 
Espero que sea de utilidad,
n/d

Contenido relacionado

  • Cómo utilizar los sinónimos de Oracle para que un usuario pueda ver/utilizar objetos de un esquema que pertenezca a otro usuario.
    Es algo muy sencillo y realmente útil. Lo único que hay que hacer es crear un sinónimo para cada objeto que queramos 'compartir', y después asignar los permisos que interese al esquema que quiere acceder al objeto.


    -- Creación del sinónimo
    CREATE PUBLIC SYNONYM "MI_TABLA"
    FOR "YO"."MI_TABLA";

    Utilizamos un sinónimo público para compartirlo para diferentes esquemas. La asignación de permisos sí que es específica para cada esquema que tenga que acceder al objeto


    -- Asignación de permisos para el usuario EL
    GRANT SELECT ON "YO"."MI_TABLA" TO "EL";
    GRANT UPDATE ON "YO"."MI_TABLA" TO "EL";
    GRANT INSERT ON "YO"."MI_TABLA" TO "EL";
    GRANT DELETE ON "YO"."MI_TABLA" TO "EL";


    -- Si se quiere dar acceso sólo de consulta a esta misma tabla para otro usuario, bastaría con hacer
    GRANT SELECT ON "YO"."MI_TABLA" TO "ELLA";

    Ahora "EL" y "ELLA" ya pueden trabajar sobre "MI_TABLA" cada uno con los permisos que el propietario de la tabla ha decidido

  • Si en un campo de tipo BLOB, objeto binario y de longitud variable, sabemos que se almacenan valores de string 'inteligibles', para consultar este valor se puede utilizar la función SUBSTRING: 

    mysql> SELECT campo_de_tipo_string, SUBSTRING(campo_de_tipo_BLOB,1,60)
        -> FROM tabla
        -> WHERE campo_de_tipo_string LIKE '%contenido';
    +-----------------------------------+--------------------------------------------------------------+
    | campo_de_tipo_string              | SUBSTRING(campo_de_tipo_BLOB,1,60)                           |
    +-----------------------------------+--------------------------------------------------------------+
    | mi contenido                      | Valor del string 1 almacenado en BLOB                        |
    | campo con contenido               | Valor del string 2 almacenado en BLOB                        |
    +-----------------------------------+--------------------------------------------------------------+

     

     

  • El operador para concatenar en SQL Server es '+', pero que este operador sirva también para sumar puede generar errores.

    La solución es bastante simple, si lo que se quiere es concatenar, hay que convertir a cadena cualquier campo de tipo numérico que intervenga en la concatenación:
    SELECT strNombre + ' tiene ' + cast(intEdad as varchar) + ' años'  FROM TablaEmpleados

  • El error ORA-30926 suele producirse cuando se realizan operaciones Merge, y lo normal es que nos deje algo descolocados, ya que la descripción del mismo no da demasiada información sobre lo que está pasando:
    ORA-30926: unable to get a stable set of rows in the source tables.

    Normalmente este error se produce cuando en la operación Merge a una fila destino que hay que actualizar le corresponden más de una fila en la tabla origen. Como el motor no sabe qué registro escoger devuelve un error. Es un problema de duplicidad en la tabla origen...

  •  

    Hola soy nuevo en el sitio, me llamo Jose de Jesus , Mexico ,DF.

    Antes que nada felicidades al creador de este sitio y a la comunidad que lo mantiene, tiene contenidos realmente buenos.

    Eh leido varias cosas de OWB ya que es lo que estoi utilizando actualmente en el trabajo, tengo manejando OWB realmente poco tiempo y me gustaria ver si me pueden ayudar con el siguiente problema que se me ah presentado. intentare ser lo mas especifico.

     

    Bueno sucede que tengo que cargar una tabla de Indicadores,

     

    Fact_Inicador

    ------------------

    id_indicador

    id_filial

    Valor

     

    Esta tabla esta en mi servidor local oracle de pruebas, y en OWB me conecto a el por medio de un modulo de correspondencia.

     

    El punto es que dependiendo de el id_indicador tengo que hacer un calculo especifico y depositarlo en el campo Valor, pero los datos para calcular cada indicador estan en un servidor oracle externo al cual solo tengo acceso de lectura a las tablas que necesito.

    Actualmente tengo esto resuelto con unas funciones que hacen los calculos reciviendo como parametros el campo id_indicador,id_filial  ... pero utilizo db links y sinonimos para referenciar las tablas externas, dichos db links los eh creado con el toad en el esquema local.

 

 

 

Gestion del Conocimiento    |    Business Intelligence y Analítica    |     Bases de Datos    |      ERP     |      CRM      |     Tendencias tecnológicas