locked
Desactivar identity de forma masiva RRS feed

  • Pregunta

  • Saludos,

    Cómo desativo y activo el campo identity autoincrementable de forma masiva cuando todas mis tablas el campo identity tiene por nombre "ID"

    Esto debido a que tengo un procedure que recorre todas las tablas y hace un insert into dbo.tablaX select * from servidorremoto.dbo.tablaX

    Gracias de antemano

    viernes, 27 de agosto de 2010 13:16

Respuestas

Todas las respuestas

  • Hola.

    Más que activar y desactivar el campo identity (algo más costoso que difícil de hacer, porque implica recrear las tablas), haz uso de "set identity_insert MiTabla on" (y off): http://msdn.microsoft.com/es-es/library/ms188059.aspx. Ojo, te obligará a escribir los nombres de las columnas en el insert.. select, pero te permitirá realizar la inserción asignándole un valor al autoincremental y poder seguir usando éste luego de la inserción.

    Si no lo logras, nos dices.


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.blogspot.es/

    viernes, 27 de agosto de 2010 13:41
    Moderador
  • Es el problema que son como 30 tablas y muchas tablas tienen decenas de campos. Pero sepungo no me queda de otra. Para poder hacer un Script

     

     

    viernes, 27 de agosto de 2010 14:33
  • Hola.

    Nada que no pueda facilitarse haciendo uso de metadatos...

    declare @insert varchar(8000)
    select @insert = 'set identity_insert Tabla1 on
    insert Tabla1 (' 
    select @insert = @insert + '[' + column_name + '],' 
    from INFORMATION_SCHEMA.COLUMNS 
    where TABLE_NAME = 'Tabla1'
    
    select @insert = left(@insert, len(@insert) -1) + '
    select * from ServidorRemoto.BDRemota.dbo.Tabla1
    set identity_insert Tabla1 off'
    
    select @insert
    


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.blogspot.es/

    viernes, 27 de agosto de 2010 14:42
    Moderador