Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2002
    Messaggi
    585

    Insert into: record doppio - miglioramento di codice

    Ciao a Tutti,

    in questi giorni ho avuto il seguente problema:

    all' esecuzione della pagina asp il record della tabella t_mrg va ad inserirsi nella tabella t_feed se e solo se in essa non esiste gia';

    il record della tabella t_mrg deve essere pero' ripetuto 2 volte uguale nella tabella t_feed; l' unica differenza tra i 2 records che vengono generati nella tabella t_feed sta nel fatto che i campi della tabella t_feed: FB01 e FB02 devono popolarsi automaticamente dei valori 'Yes' in modo alternato.

    Quindi, se il record della tabella t_mrg e' il numero 2014073 e non esiste nella tabella t_feed,

    all' esecuzione della pagina asp il cui codice e' di sotto riportato,

    si generano 2 records uguali nella tabella t_feed che presentano l' unica differenza nei campi FB01 e FB02 nel sugente modo:

    Numero ... FB01 FB02

    2014073 Yes

    2014073 Yes


    <%@ Language=VBScript %>
    <%
    Option Explicit
    Dim cn3, i, sql9
    i = 1
    '
    Set cn3 = Server.CreateObject("ADODB.Connection")
    cn3.ConnectionString = "DSN=9_feed.dsn"
    cn3.Open
    sql9 = "INSERT INTO t_feed (Numero, Nome, FB01, FB02) " & _
    "SELECT t_mrg.Numero, First(t_mrg.Nome) AS Nome, First(IIf(IsNull([t_feed.FB02]),'Yes',[t_feed.FB01])) AS FB01, First(t_feed.FB02) AS FB02 " & _
    "FROM t_mrg, t_feed " & _
    "GROUP BY t_mrg.Numero " & _
    "HAVING ((t_mrg.Numero=2014073) AND t_mrg.Numero Not In (SELECT t_feed.Numero FROM t_feed))"
    cn3.Execute sql9
    sql9 = "INSERT INTO t_feed (Numero, Nome, FB01, FB02) " & _
    "SELECT TOP 1 t_mrg.Numero, First(t_mrg.Nome) AS Nome, t_feed.FB01 AS FB01, 'Yes' AS FB02 " & _
    "FROM t_mrg, t_feed " & _
    "GROUP BY t_mrg.Numero, t_feed.FB01 " & _
    "HAVING (t_mrg.Numero=2014073) AND (SELECT Count(*) AS Conteggio FROM t_feed WHERE Numero=2014073)=" & i & ""
    cn3.Execute sql9
    cn3.Close
    '
    Set cn3 = Nothing
    %>


    Il codice postato funziona bene; solo che ho scritto questo post perche' chiedevo se c' era un modo migliore di scriverlo ...

    Nel senso:


    • mi piacerebbe che anziche' eseguire 2 volte sql9 si potessero unire i due INSERT INTO in un unico blocco di codice
    • non mi piace essere ricorso al SELECT TOP 1



    Grazie mille in anticipo !!!
    Ultima modifica di betto; 17-06-2014 a 12:35

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2002
    Messaggi
    585
    nel messaggio non ho incolonnato bene i valori:

    l' output e' cosi':


    Numero FB01 FB02
    2014073 Yes
    2014073 Yes
    Ultima modifica di betto; 17-06-2014 a 14:48

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2002
    Messaggi
    585
    E' possibile migliorare il seguente codice ??

    codice:
    Set cn_fd = Server.CreateObject("ADODB.Connection")
    cn_fd.ConnectionString = "DSN=9_feed.dsn"
    cn_fd.Open      
    sql9 = "INSERT INTO t_feed (Numero, Qualita, Activity, Nazione, Nome, PL, FB01, FB02) " & _
    "SELECT t_mrg.Numero, First(t_mrg.Qualita) AS Qualita, First(t_mrg.Activity) AS Activity, First(t_mrg.Nazione) AS Nazione, First(t_mrg.Nome) AS Nome, First(t_mrg.Service_sign_1) AS PL, 'Yes' AS FB01, '' AS FB02 " & _
    "FROM t_mrg, t_feed " & _
    "GROUP BY t_mrg.Numero " & _
    "HAVING t_mrg.Numero=" & rec
    cn_fd.Execute sql9
    sql9 = "INSERT INTO t_feed (Numero, Qualita, Activity, Nazione, Nome, PL, FB01, FB02) " & _
    "SELECT TOP 1 t_mrg.Numero, First(t_mrg.Qualita) AS Qualita, First(t_mrg.Activity) AS Activity, First(t_mrg.Nazione) AS Nazione, First(t_mrg.Nome) AS Nome, First(t_mrg.Service_sign_1) AS PL, '' AS FB01, 'Yes' AS FB02 " & _
    "FROM t_mrg, t_feed " & _
    "GROUP BY t_mrg.Numero " & _
    "HAVING t_mrg.Numero=" & rec                              
    cn_fd.Execute sql9      
    cn_fd.Close

    tramite magari un concat, in modo da eseguire l' sql9 una sola volta ....

    Ho provato con UNION ALL ma mi da' errore di sintassi

    Grazie in anticipo !!
    Ultima modifica di betto; 24-08-2015 a 16:53

  4. #4
    puoi provare con

    INSERT INTO ...
    (SELECT ... 'Yes' AS FB01, ... FROM ... GROUP BY ... HAVING ...
    UNION
    SELECT ... 'Yes' AS FB02, ... FROM ... GROUP BY ... HAVING ...)

    facce sape'

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2002
    Messaggi
    585
    messo cosi' mi da' errore di sintassi:

    INSERT INTO t_feed ( Numero, Qualita, Activity, Nazione, Nome, PL, FB01, FB02 )
    (SELECT t_mrg.Numero, First(t_mrg.Qualita) AS Qualita, First(t_mrg.Activity) AS Activity, First(t_mrg.Nazione) AS Nazione, First(t_mrg.Nome) AS Nome, First(t_mrg.Service_sign_1) AS PL,
    'Yes' AS FB01, '' AS FB02
    FROM t_mrg, t_feed
    GROUP BY t_mrg.Numero
    HAVING t_mrg.Numero=2014003
    UNION
    SELECT t_mrg.Numero, First(t_mrg.Qualita) AS Qualita, First(t_mrg.Activity) AS Activity, First(t_mrg.Nazione) AS Nazione, First(t_mrg.Nome) AS Nome, First(t_mrg.Service_sign_1) AS PL,
    '' AS FB01, 'Yes' AS FB02
    FROM t_mrg, t_feed
    GROUP BY t_mrg.Numero
    HAVING t_mrg.Numero=2014003);

  6. #6
    INSERT INTO ...
    SELECT ... 'Yes' AS FB01, ... FROM ... GROUP BY ... HAVING ...
    UNION
    SELECT ... 'Yes' AS FB02, ... FROM ... GROUP BY ... HAVING ...

    oppure

    INSERT INTO ...
    (SELECT ... 'Yes' AS FB01, ... FROM ... GROUP BY ... HAVING ...
    UNION
    SELECT ... 'Yes' AS FB02, ... FROM ... GROUP BY ... HAVING ...) AS TX

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2002
    Messaggi
    585
    Ti ringrazio molto ma in entrambi i modi ottengo sempre errore di sintassi ....

    Non pensavo fosse cosi' difficile inserire in simultanea 2 records ...

    Vi e' per caso un altro sistema alternativo ??

  8. #8

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2002
    Messaggi
    585
    Access 2010, ho provato a simulare li' la query e poi ho provato lo stesso da ASP ma in entrambi gli ambienti ottengo errore

  10. #10
    prova questa strana sintassi

    INSERT INTO tabdest
    SELECT a.* FROM
    [SELECT * FROM taborig WHERE fld LIKE 'A%'
    UNION
    SELECT * FROM taborig WHERE fld LIKE 'G%']. AS A

    attento alle [] e al punto dopo l'ultima ]

    adatta la query

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.