INSERT SET o INSERt VALUES

INSERT SET o INSERt VALUES

Postby sysctrl2 » Wed Feb 11, 2015 8:44 pm

Cual es la diferencia entre.

"INSERT INTO clientes SET "
y
"INSERT INTO clientes ( field1. field2. field3) VALUES "

hablando concretamente de MySql y DOLPHIN


saludos..
Cesar Cortes Cruz
SysCtrl Software
Mexico

' Sin +- FWH es mejor "
User avatar
sysctrl2
 
Posts: 1022
Joined: Mon Feb 05, 2007 7:15 pm

Re: INSERT SET o INSERt VALUES

Postby horacio » Wed Feb 11, 2015 11:55 pm

Por lo que tengo entendido son dos forma de hacer un insert con resultados idénticos.

Saludos
horacio
 
Posts: 1363
Joined: Wed Jun 21, 2006 12:39 am
Location: Capital Federal Argentina

Re: INSERT SET o INSERt VALUES

Postby sysctrl2 » Thu Feb 12, 2015 5:45 am

gracias,
algún otro comentario ?
saludos.
Cesar Cortes Cruz
SysCtrl Software
Mexico

' Sin +- FWH es mejor "
User avatar
sysctrl2
 
Posts: 1022
Joined: Mon Feb 05, 2007 7:15 pm

Re: INSERT SET o INSERt VALUES

Postby Willi Quintana » Thu Feb 12, 2015 10:49 pm

Hola,,,
Sintaxis pata INSERT
INSERT INTO productos (campo1, campo2, campo3) VALUES (var1, car2, var3) WHERE <condición>
Para UPDATE
UPDATE productos SET campo1 = var1, campo2 = var2, campo3 = var3 WHERE <condición>
User avatar
Willi Quintana
 
Posts: 1022
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú

Re: INSERT SET o INSERt VALUES

Postby joseluisysturiz » Fri Feb 13, 2015 12:11 am

INSERT inserta nuevas filas en una tabla existente. Los formatos INSERT ... VALUES e INSERT ... SET, insertas filas basándose en los valores especificados explícitamente. El formato The INSERT ... SELECT inserta filas seleccionadas de otra tabla o tablas. El formato INSERT ... VALUES con una lista de múltiples valores está soportada por MySQL desde la versión 3.22.5. La sintaxis INSERT ... SET está soportada por MySQL desde la versión 3.22.10...saludos... :shock:

http://mysql.conclase.net/curso/?sqlsen=INSERT
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: INSERT SET o INSERt VALUES

Postby Armando » Fri Feb 13, 2015 12:17 am

César:

Paisano, como te han mencionado es lo mismo pero no es igual (Parafraseando a Vicente Fernández) :)

A mi me agrada más la opción con SET pues me permite ver el par de campo y su correspondiente
valor a insertar.
Code: Select all  Expand view  RUN

                        cCmdSql := "INSERT INTO " +;
                                            "Fijos " +;
                                        "SET " +;
                                            "Fij_Cia = '" + STR(oRsEmp:Fields("EMP_CIA"):Value,02,0) + "'," +;
                                            "Fij_Emp = '" + STR(oRsEmp:Fields("EMP_EMP"):Value,05,0) + "'," +;
                                            "Fij_Con = '" + STR(nCpto,03,0) + "'," +;
                                            "Fij_Vec    = '" + STR(nUnidad,05,2) + "'," +;
                                            "Fij_Cal = 1" + "," +;
                                            "Fij_Sdi    = '" + STR(nSdi,11,2) +"'," +;
                                            "Fij_Sdv    = '" + STR(nSdv,11,2) +"'"

 


Mientras que con la otra sintaxis se puede uno perder sobre todo cuando son muchos los pares de
campo/valor.

Cual es la mejor?, la que te acomode !.

Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
Armando
 
Posts: 3230
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Re: INSERT SET o INSERt VALUES

Postby sysctrl2 » Fri Feb 13, 2015 12:24 am

Jose Luis,
GRACIAS, MUY CLARO,

Paisa, gracias,

se me presenta el sig. caso.

Code: Select all  Expand view  RUN
#include "fivewin.ch"
#include <tdolphin.ch>

#DEFINE C_SIMPLE CHR( 39 )
#DEFINE c_simple CHR( 39 )


Function Test()
    local aNombres
    local i
    local cInsertQry := ""
    local cQry
    aadd( aNombres, {"001", "NOMBRE 1"} )
    aadd( aNombres, {"002", "NOMBRE 2"} )
    aadd( aNombres, {"003", "NOMBRE 3"} )
    aadd( aNombres, {"004", "NOMBRE 4"} )
    aadd( aNombres, {"005", "NOMBRE 5"} )
    aadd( aNombres, {"006", "NOMBRE 6"} )
    aadd( aNombres, {"007", "NOMBRE 7"} )
    aadd( aNombres, {"008", "NOMBRE 8"} )
    aadd( aNombres, {"009", "NOMBRE 9"} )
    aadd( aNombres, {"010", "NOMBRE 10"} )

    // PRIMERO TOMAR LOS VALORES
    //  PARA QUE SEA MAS RAPIDO EL CICLO FOR
       // estamos hablando de que los arreglos pueden contener desde 100 o hasta 20 mil registros

    for i := 1 to len( aNombres )
        cQry := "INSERT INTO clientes SET "
        cQry += "clave="          + ClipValue2SQL( aNombres[i][1] )  + ","
        cQry += "nombre="         + ClipValue2SQL( aNombres[i][2] )
        cInsertQry += cQry + ";"       
    NEXT

    //AQUI QUIERO AGREGAR LOS REGISTROS AL FINAL DE
    //DE RECORRER EL CICLO

    // pero NO FUNCIONA !!! mysql con dolphin
    // no marca error ni nada simplemente no inserta los
    // registros.

    TRY
        oCon:Execute( cInsertQry )
    CATCH
    END

      // ACLARO TENGO MYSQL. 5.0  
     // GRACIAS.. SALUDOS..


return nil
Cesar Cortes Cruz
SysCtrl Software
Mexico

' Sin +- FWH es mejor "
User avatar
sysctrl2
 
Posts: 1022
Joined: Mon Feb 05, 2007 7:15 pm

Re: INSERT SET o INSERt VALUES

Postby joseluisysturiz » Fri Feb 13, 2015 12:37 am

sysctrl2 wrote:Jose Luis,
GRACIAS, MUY CLARO,

Paisa, gracias,

se me presenta el sig. caso.

Code: Select all  Expand view  RUN
#include "fivewin.ch"
#include <tdolphin.ch>

#DEFINE C_SIMPLE CHR( 39 )
#DEFINE c_simple CHR( 39 )


Function Test()
    local aNombres
    local i
    local cInsertQry := ""
    local cQry
    aadd( aNombres, {"001", "NOMBRE 1"} )
    aadd( aNombres, {"002", "NOMBRE 2"} )
    aadd( aNombres, {"003", "NOMBRE 3"} )
    aadd( aNombres, {"004", "NOMBRE 4"} )
    aadd( aNombres, {"005", "NOMBRE 5"} )
    aadd( aNombres, {"006", "NOMBRE 6"} )
    aadd( aNombres, {"007", "NOMBRE 7"} )
    aadd( aNombres, {"008", "NOMBRE 8"} )
    aadd( aNombres, {"009", "NOMBRE 9"} )
    aadd( aNombres, {"010", "NOMBRE 10"} )

    // PRIMERO TOMAR LOS VALORES
    //  PARA QUE SEA MAS RAPIDO EL CICLO FOR
       // estamos hablando de que los arreglos pueden contener desde 100 o hasta 20 mil registros

    for i := 1 to len( aNombres )
        cQry := "INSERT INTO clientes SET "
        cQry += "clave="          + ClipValue2SQL( aNombres[i][1] )  + ","
        cQry += "nombre="         + ClipValue2SQL( aNombres[i][2] )
        cInsertQry += cQry + ";"       
    NEXT

    //AQUI QUIERO AGREGAR LOS REGISTROS AL FINAL DE
    //DE RECORRER EL CICLO

    // pero NO FUNCIONA !!! mysql con dolphin
    // no marca error ni nada simplemente no inserta los
    // registros.

    TRY
        oCon:Execute( cInsertQry )
    CATCH
    END

      // ACLARO TENGO MYSQL. 5.0  
     // GRACIAS.. SALUDOS..


return nil


Si quieres que grabe cada registro dentro del for..debes agregar el execute..recuerde que ese es el que te EJECUTA el comando mysql..asi lo tengo y funciona perfecto, tambien prueba quitando el ultimo ";", saludos... :shock:
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: INSERT SET o INSERt VALUES

Postby sysctrl2 » Fri Feb 13, 2015 3:45 am

Jose Luis,

de echo lo tengo asi, los registros los agrego dentro del FOR NEXT de uno por uno,

pero cuando son muchos elementos en el array, se hace lenta la inserción de registros

yo quiero ver si primero recorro el for next , poniendo las variables en un STRING

y al final agregarlos a la tabla,

se podrá hacer eso ?

gracias.
saludos..
Cesar Cortes Cruz
SysCtrl Software
Mexico

' Sin +- FWH es mejor "
User avatar
sysctrl2
 
Posts: 1022
Joined: Mon Feb 05, 2007 7:15 pm

Re: INSERT SET o INSERt VALUES

Postby joseluisysturiz » Fri Feb 13, 2015 4:22 am

Lo que seria es hacer un query como cuando se hacen respaldo de tablas y restauracion, aunque creo que al final seria casi igual, si vas hacer 2 procesos, yo te recomendaria que hicieras el insert y el execute dentro del for next, asi aseguraria la carga de los registros, igual va a tardar y cargar un array con tantos registros, te podria causar inconsistencia en los datos, has ambos metodos y calculalos con un timer haber cual te lleva menos tiempo...yo insisto en INSERT / EXECUTE dentro de FOR NEXT y podiras hasta colocar un oMeter...saludos... :shock:
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: INSERT SET o INSERt VALUES

Postby sysctrl2 » Fri Feb 13, 2015 4:30 am

Los registros los tomo de un archivo de texto plano,
es muy rápido el while ! oTxt:Eof()
actualmente lo hago como dices
pero pensé si habría otra forma de hacerlo mas rápido,
quizás un PROCEDURE que corra dentro del mismo server,

saludos.
Cesar Cortes Cruz
SysCtrl Software
Mexico

' Sin +- FWH es mejor "
User avatar
sysctrl2
 
Posts: 1022
Joined: Mon Feb 05, 2007 7:15 pm

Re: INSERT SET o INSERt VALUES

Postby joseluisysturiz » Fri Feb 13, 2015 4:39 am

Revisando he visto algo...veo que tienes el Insert dentro del for..next...eso quiere decir que va a realizar un insert por cada registro, eso haria lentitud, si quieres crear un scrip con todos los registros pero un solo Insert prueba dejando el insert fuera del for y que se concatenen los valores...algo como esto, saludos... :shock:

Code: Select all  Expand view  RUN


  cQry := "INSERT INTO clientes SET "
for i := 1 to len( aNombres )
        cQry += "clave="          + ClipValue2SQL( aNombres[i][1] )  + ","
        cQry += "nombre="         + ClipValue2SQL( aNombres[i][2] )
        cInsertQry += cQry + ";"      
    NEXT

TRY
        oCon:Execute( cInsertQry )
    CATCH
    END
 
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: INSERT SET o INSERt VALUES

Postby fgondi » Fri Feb 13, 2015 8:43 am

Te falta los retornos de carro.

Code: Select all  Expand view  RUN
 for i := 1 to len( aNombres )
        cQry := "INSERT INTO clientes SET "
        cQry += "clave="          + ClipValue2SQL( aNombres[i][1] )  + ","
        cQry += "nombre="         + ClipValue2SQL( aNombres[i][2] )
        cInsertQry += cQry + ";" + chr(13)+chr(10)      
    NEXT


Sin ellos la cadena que quieres ejecutar quedaría así:
Code: Select all  Expand view  RUN
INSERT INTO Clientes SET clave="001",nombre="NOMBRE 1";INSERT INTO clientes SET clave="02",nombre="NOMBRE 2";


Aunque no se vea el código sql a ejecutar, a mi me gusta colocarlo:
Code: Select all  Expand view  RUN
 for i := 1 to len( aNombres )
        cQry := "INSERT INTO clientes SET " + chr(13)+chr(10)  
        cQry += "clave="     + ClipValue2SQL( aNombres[i][1] ) + "," + chr(13)+chr(10)  
        cQry += "nombre="  + ClipValue2SQL( aNombres[i][2] ) + ";" + chr(13)+chr(10)
        cInsertQry += cQry + chr(13)+chr(10)  
    NEXT

Igual que lo grabo en la variable, quiero que aparezca en la sentencia sql.
Además añado otro retorno de carro, entre cada instrucción insert para separlo.

El resultado sería:
Code: Select all  Expand view  RUN
INSERT INTO Clientes SET
clave="001",
nombre="NOMBRE 1";

INSERT INTO clientes SET
clave="02",
nombre="NOMBRE 2";
Un saludo
Fernando González Diez
ALSIS Sistemas Informáticos
User avatar
fgondi
 
Posts: 694
Joined: Fri Oct 07, 2005 6:58 am
Location: Palencia, España

Re: INSERT SET o INSERt VALUES

Postby fgondi » Fri Feb 13, 2015 9:07 am

En cuanto a la instrucción sql que ejecutas, desconozco si mysql funciona, pero creo que está mal escrita.

el comando "SET" se usa para actualizar los registros (UPDATE)
Para usar "INSERT INTO" tendrías estas posibilidades

Code: Select all  Expand view  RUN
INSERT INTO clientes (Clave, Nombre) Values ('01', 'NOMBRE 1');

Añade un registro en tabla clientes, grabando en el campo "Clave" el valor "01" y en el campo "Nombre" el valor "NOMBRE 1"

Code: Select all  Expand view  RUN
INSERT INTO clientes Values ('01', 'NOMBRE 1');

Sin especificar los valor que quieres actualizar "(Clave, Nombre)"
Añade un registro en tabla clientes y tenemos que indicar en "Values" todos los campos que tenga la tabla, ordenando las columnas a incluir tal cual estén en la tabla "clientes"
En el ejemplo: La tabla clientes tendría que tener sólo 2 campos y además tendrían que estar creados con el campo "Clave" primero y "Nombre" después.
Si la tabla, cuando se creó, se incluyo primero el campo "nombre" y luego el campo "clave", daría error.


Code: Select all  Expand view  RUN
INSERT INTO clientes (Clave, Nombre)
Select ... From "Otra tabla"
Where ...;

Igual que en los anteriores, añade registros a la tabla clientes, pero en este caso coge los valores de "Otra tabla".
Se puede quitar "(Clave, Nombre)", sabiendo, como comenté en el apartado anterior, que los campos tendrán que estar ordenador tal cual están en la tabla "clientes".
Este método se usa cuando el registro que queremos añadir está en otra tabla, evitamos tener que pasarlo a variables para luego insertarlo en "clientes".
Además puede añadir mas de un registro. Añade todos los registros que devuelva la consulta ( Select ... From "Otra tabla" Where ... )
Un saludo
Fernando González Diez
ALSIS Sistemas Informáticos
User avatar
fgondi
 
Posts: 694
Joined: Fri Oct 07, 2005 6:58 am
Location: Palencia, España

Re: INSERT SET o INSERt VALUES

Postby Carlos Mora » Fri Feb 13, 2015 9:31 am

César,

¿Y si pruebas con esto?
Code: Select all  Expand view  RUN

    #include "fivewin.ch"
    #include <tdolphin.ch>

    #DEFINE C_SIMPLE CHR( 39 )
    #DEFINE c_simple CHR( 39 )


    Function Test()
        local aNombres
        local i
        local cInsertQry := ""
        local cQry
        aadd( aNombres, {"001", "NOMBRE 1"} )
        aadd( aNombres, {"002", "NOMBRE 2"} )
        aadd( aNombres, {"003", "NOMBRE 3"} )
        aadd( aNombres, {"004", "NOMBRE 4"} )
        aadd( aNombres, {"005", "NOMBRE 5"} )
        aadd( aNombres, {"006", "NOMBRE 6"} )
        aadd( aNombres, {"007", "NOMBRE 7"} )
        aadd( aNombres, {"008", "NOMBRE 8"} )
        aadd( aNombres, {"009", "NOMBRE 9"} )
        aadd( aNombres, {"010", "NOMBRE 10"} )

        // PRIMERO TOMAR LOS VALORES
        //  PARA QUE SEA MAS RAPIDO EL CICLO FOR
           // estamos hablando de que los arreglos pueden contener desde 100 o hasta 20 mil registros

         cQry := "INSERT INTO clientes (clave,nombre) VALUES  "
        for i := 1 to len( aNombres )
            cQry += "( "          + ClipValue2SQL( aNombres[i][1] )  + ","  + ClipValue2SQL( aNombres[i][2] ) + ")"
            IF i < Len( aNombres )
                cQry+= ','
        NEXT

        //AQUI QUIERO AGREGAR LOS REGISTROS AL FINAL DE
        //DE RECORRER EL CICLO

        // pero NO FUNCIONA !!! mysql con dolphin
        // no marca error ni nada simplemente no inserta los
        // registros.

        TRY
            oCon:Execute( cQry )
        CATCH
        END

          // ACLARO TENGO MYSQL. 5.0  
         // GRACIAS.. SALUDOS..


    return nil
 


con esto haces todo de un solo saque.
Saludos
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
“If you think education is expensive, try ignorance"
Carlos Mora
 
Posts: 989
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Next

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 63 guests