Quiero insertar una fila en una tabla de SQL server en una posición específica. Por ejemplo, mi tabla tiene 100 filas y quiero insertar una nueva fila en la posición 9. Pero la columna de ID que es la PK de la tabla ya tiene una fila con ID 9. ¿Cómo puedo insertar una fila en esta posición, de manera que todas las filas después de que se cambio a la siguiente posición?

OriginalEl autor user648610 | 2011-08-05

6 Comentarios

  1. 10

    Tablas relacionales no tienen la «posición». Como optimización, un índice que se va a ordenar filas por la clave especificada, si desea insertar una fila en un rango específico en el orden de las teclas, se inserta con una clave que tipo y en que rango de posición. En tu caso vas a tener que actualizar todas las filas con un valor si ID mayor que 8 el incremento de la IDENTIFICACIÓN con 1, a continuación, introduzca el ID con el valor de 9:

    UPDATE TABLE table SET ID += 1 WHERE ID >= 9;
    INSERT INTO TABLE (ID, ...) VALUES (9, ...);

    No hace falta decir, no puede ser, posiblemente, cualquier cuerdo razón para hacer algo como eso. Si realmente tiene este requisito, entonces se puede utilizar una clave compuesta con dos (o más) partes. Dicha clave le permitirá insertar subclaves de manera que se ordene en el orden deseado. Pero es mucho más probable que su problema puede ser resuelto exclusivamente por la especificación de un ORDEN correcto, w/o jugar con el orden físico de las filas.

    Otra forma de ver esto es a reconsiderar lo de la clave principal significa: el identificador de una entidad, que no cambia durante el que la entidad de toda la vida. Entonces tu pregunta puede ser reformulado de una manera que hace que la falacia de la pregunta más obvia:

    Quiero cambiar el contenido de la entidad con el ID de 9 a algunos de los nuevos
    valor. Los viejos valores de la entidad 9 se debe mover el contenido
    de la entidad con la ID 10. El contenido antiguo de la entidad con el ID debe ser de 10
    se trasladó a la entidad con ID 11… y así sucesivamente y así sucesivamente. El viejo
    el contenido de la entidad con el ID más alto debe ser insertado como un nuevo
    entidad.

    OriginalEl autor Remus Rusanu

  2. 4

    No, usted no puede controlar donde la nueva fila se inserta. En realidad, no necesitas: utilizar la ORDER BY cláusula en su SELECT instrucciones para ordenar los resultados de la manera que usted necesita.

    OriginalEl autor bfavaretto

  3. 3

    Por lo general, usted no desea utilizar las claves principales de esta manera. Un mejor enfoque sería crear otra columna llamada «posición» o similar donde se puede seguir la pista de su propio sistema de pedidos.

    Para realizar el cambio podría ejecutar una consulta como esta:

    UPDATE table SET id = id + 1 WHERE id >= 9

    Esto no funcionará si la columna se utiliza auto_increment funcionalidad.

    OriginalEl autor JK.

  4. 2
    DECLARE  @duplicateTable4 TABLE (id int,data VARCHAR(20))
    INSERT INTO @duplicateTable4 VALUES (1,'not duplicate row')
    INSERT INTO @duplicateTable4 VALUES (2,'duplicate row')
    INSERT INTO @duplicateTable4 VALUES (3,'duplicate rows')
    INSERT INTO @duplicateTable4 VALUES (4,'second duplicate row')
    INSERT INTO @duplicateTable4 VALUES (5,'second duplicat rows')
    DECLARE  @duplicateTable5 TABLE (id int,data VARCHAR(20))
    
    insert into @duplicateTable5 select *from @duplicateTable4
    delete from @duplicateTable4
    
    
    declare @i int , @cnt int
    set @i=1
    set @cnt=(select count(*) from @duplicateTable5)
    while(@i<[email protected]cnt)
    begin
    if @i=1 
    begin
    insert into @duplicateTable4(id,data) select 11,'indian' 
    insert into @duplicateTable4(id,data) select id,data from @duplicateTable5 where id[email protected]i
    end
    else
    insert into @duplicateTable4(id,data) select id,data from @duplicateTable5 where id[email protected]i
    set @i[email protected]i+1
    end
    
    
        select *from @duplicateTable4
    este código puede ser para insertar valores en una posición particular, en eso estoy de posición=1 donde el nuevo valor de fila insertada en la posición de fila 1

    OriginalEl autor Srinvias Pothu

  5. 0

    Este tipo de viole el propósito de una tabla relacional, pero si usted necesita, que en realidad no es difícil de hacer.

    1) uso ROW_NUMBER() OVER(ORDER BY NameOfColumnToSort ASC) AS Row a hacer una columna para el número de fila en la tabla.

    2) a partir De aquí se puede copiar (utilizando SELECT columnsYouNeed INTO ) el antes y el después de las porciones de la tabla en dos tablas separadas (basa en que el número de la fila en la que desea insertar sus valores después), utilizando un WHERE Row < ## y Row >= ## declaración respectivamente.

    3) a continuación, colocar la tabla original utilizando DROP TABLE.

    4), a Continuación, utilizar un UNION para el antes de la tabla, la fila que desea insertar (utilizando una sola definido explícitamente SELECT declaración sin nada más), y después de la tabla. Por ahora tiene dos UNION declaraciones para 3 diferentes cláusulas select. Aquí sólo se puede envolver este en un SELECT INTO FROM cláusula llamando el nombre de la tabla original.

    5) y por Último, DROP TABLE las dos tablas que has hecho.

    Esto es similar a cómo un ALTER TABLE obras.

    OriginalEl autor

Dejar respuesta

Please enter your comment!
Please enter your name here