Tengo una consulta tSQL que toma los datos de una tabla y la copia en una nueva tabla, pero sólo las filas reunión de una determinada condición:

SELECT VibeFGEvents.* 
INTO VibeFGEventsAfterStudyStart 
FROM VibeFGEvents
LEFT OUTER JOIN VibeFGEventsStudyStart
ON 
    CHARINDEX(REPLACE(REPLACE(REPLACE(logName, 'MyVibe ', ''), ' new laptop', ''), ' old laptop', ''), excelFilename) > 0
    AND VibeFGEventsStudyStart.MIN_TitleInstID <= VibeFGEvents.TitleInstID
    AND VibeFGEventsStudyStart.MIN_WinInstId <= VibeFGEvents.WndInstID
WHERE VibeFGEventsStudyStart.excelFilename IS NOT NULL
ORDER BY VibeFGEvents.id

El código utilizando la tabla que se basa en su orden, y la copia anterior no conserva el orden que yo esperaba. I. e. las filas de la tabla nueva VibeFGEventsAfterStudyStart no son monótonamente creciente en el VibeFGEventsAfterStudyStart.id columna copiada de VibeFGEvents.id.

En tSQL ¿cómo podría yo conservan el orden de las filas de VibeFGEvents en VibeFGEventsStudyStart?

por simplicidad , no podía utilizar nombres más cortos , por lo que será más clara ?
nombres más cortos = menos significativas, por lo que será más clara.
buscando VibeFGEventsStudyStart.MIN_TitleInstID y la búsqueda de si todos los demás son el mismo nombre , es doloroso.
Qué es lo que tiene que ver con Sql server ? Estoy hablando de hacer preguntas. nosotros no tenemos cuidado acerca de sus nombres reales. nos preocupamos por su problema. Es por eso que él está aquí. para hacer una pregunta.(más claro = para nosotros , PARA los usuarios)
Desde bases de datos relacionales per se, realmente no tiene ningún concepto de – ¿cuál es el punto de la preservación de la orden en insertar? En general, cualquier tabla relacional no está ordenado de forma predeterminada; un conjunto de resultados puede ser ordenado si definir explícitamente un ORDER BY cláusula en su SELECT

OriginalEl autor dumbledad | 2013-01-20

5 Comentarios

  1. 24

    ¿Para qué?

    Punto de datos en una tabla no está ordenado. En SQL Server intrínseca de la orden de almacenamiento de una tabla es la de el (si está definido) índice agrupado.

    El orden en el que se insertan los datos es básicamente “irrelevante”. Se olvida el momento en que se escriben los datos en la tabla.

    Como tal, no se gana nada, incluso si usted consigue este material. Si usted necesita una orden de compra cuando el tratamiento de datos, usted TIENE que poner una cláusula order by en la selección que se presenta. Nada es al azar – es decir, el orden et datos no está determinado y pueden cambiar.

    Así que no tiene sentido tener un orden específico en la inserción de como se debe tratar de lograr.

    SQL 101: conjuntos no tienen fin.

    Es un concepto fundamental en SQL – bastante SQL se basa. La orden HA tobe impuestas cuando materialzing un conjunto (en un select). A menos que uno define un orden en un selecto; los resultados son arbitrarias y, teóricamente, puede cambiar entre llamadas. El orden de los datos o las inserciones se pierde en el momento que los datos están en la tabla. No hay oculto “natural” de la orden. Este es el núcleo de operaciones.
    Es más exacto decir que el orden no está garantizada sin una orden? Decir que me inserción masiva de datos desde un archivo en la Tabla1 y, a continuación, ejecutar select * from Tabla1 – puedo obtener los datos de nuevo en exactamente el mismo orden en que se inserta, no?. Cuando se que cambiar? Esto es importante para el 3d, las apps de terceros que migran / importación de datos a través de odbc. Si el 3d de la parte de la aplicación no permite aplicar una cláusula order, y si necesita los datos importados “en orden” (para evitar bloqueos de registros, etc.), entonces usted haría bien para asegurarse de que los datos se insertan en la tabla en el orden deseado?
    No, no se garantiza. PUEDE ocurrir, puede ser que no. Si hay un índice agrupado en la tabla 1 con otro orden de probabilidad viene en ese orden. Si hay otro índice, debido a una cláusula where se presenta en un orden aleatorio en función de cómo sql server decide buscar cosas. En una consulta más compleja usted puede encontrar paralelismo utilizando diferentes hilos, a continuación, la fusión de los resultados. No se garantiza que significa que dependen de los efectos secundarios que PUEDEN romper. Se llama super cutre de programación.
    A veces, es bueno para ver los datos en un orden determinado, de forma predeterminada. No es necesario, tienes razón, pero algunas personas lo prefieren.
    Cómo acerca de las tablas sin índices agrupados, como aquellos con UUID claves primarias ?

    OriginalEl autor TomTom

  2. 16

    Sé que esto es un poco viejo, pero necesitaba hacer algo similar. Quería insertar el contenido de una tabla a otra, pero en un orden aleatorio. Me di cuenta de que podía hacer esto mediante el uso de select top n y order by newid(). Sin la ‘arriba n’, a fin de que no se haya conservado y el segundo de la tabla, las filas en el mismo orden que la primera. Sin embargo, con ‘arriba n’, el orden (random en mi caso) se ha conservado. He utilizado un valor de ‘n’, que era mayor que el número de filas. Así que mi consulta era a lo largo de las líneas de:

    insert Table2 (T2Col1, T2Col2)
      select top 10000 T1Col1, T1Col2
      from Table1
      order by newid()
    Genio respuesta! la parte Superior hace maravillas – gracias Michael

    OriginalEl autor Michael

  3. 0

    Usted no puede hacer esto con el FIN, pero si se crea un Índice Agrupado en VibeFGEvents.id después de su SELECCIONE EN la tabla, serán ordenados en el disco por VibeFGEvents.id.

    OriginalEl autor Cyndi Baker

  4. 0

    La razón por la que a uno le deseo esto (un orden específico) es porque no se puede definir el orden en una subconsulta, así, la idea es que, si se crea una variable de tabla, a CONTINUACIÓN, hacer una consulta de la tabla de variables, se podría pensar que iba a conservar el orden(es decir, para concatenar filas que deben estar en orden, por ejemplo, XML o json), pero no se puede.
    Así que, ¿qué hacer?
    La respuesta es la fuerza de SQL a fin de que mediante el uso de ARRIBA en tu select (seleccionar sólo una cantidad suficiente para cubrir todos sus filas).

    OriginalEl autor MC9000

  5. -1

    Trate de usar INSERT INTO en lugar de SELECT INTO

    INSERT INTO VibeFGEventsAfterStudyStart 
    SELECT VibeFGEvents.* 
    FROM VibeFGEvents
    LEFT OUTER JOIN VibeFGEventsStudyStart
    ON 
        CHARINDEX(REPLACE(REPLACE(REPLACE(logName, 'MyVibe ', ''), ' new laptop', ''), ' old laptop', ''), excelFilename) > 0
        AND VibeFGEventsStudyStart.MIN_TitleInstID <= VibeFGEvents.TitleInstID
        AND VibeFGEventsStudyStart.MIN_WinInstId <= VibeFGEvents.WndInstID
    WHERE VibeFGEventsStudyStart.excelFilename IS NOT NULL
    ORDER BY VibeFGEvents.id`
    Una tabla no tiene fin. Ver otros comentarios en esta pregunta.
    Yo no entiendo la tabla no tiene fin en este escenario. El punto es que las filas pueden ser insertados usando INSERT INTO con una sub consulta que se puede pedir.
    Una simple observación: En este caso, el ORDER BY cláusula es para SELECT VibeFGEvents.* FROM ... declaración y no para INSERT declaración.
    No importa en qué orden se inserta en. Cuando se selecciona, ese orden se ha ido. Usted no puede llegar a la “salida” de nuevo.
    Salvo que hay una ordenación implícita por la primera columna, que a menudo puede ser un entero secuencial de identidad de la clave principal.

    OriginalEl autor Geo2013

Dejar respuesta

Please enter your comment!
Please enter your name here