Trovare ultimo record inserito

di Anonimizzato18607 il
7 risposte
Ciao a tutti,

Ho un applicativo che scrive in varie tabelle che purtroppo non hanno né primary key né un id.
C'è un modo per trovare l'ultimo record inserito?
Grazie.

Pietro

7 Risposte

  • Veramente bizzarro ... tabelle senza Id né Pk ... che campi ci sono ? Date? Contatori? Altro?

    Altrimenti la vedo dura ...
  • Grazie per la risposta
    Niente contatori e niente date... è per questo che non so più dove sbattere la testa. Speravo che in Sql Server ci fosse un modo per trovare l'ultima riga inserita, ma anche cercando su internet non ho trovato nulla a parte le funzioni IDENT_CURRENT, @@identity e SCOPE_IDENTITY() che però non riesco ad usare. Di seguito un estratto della tabella

    Code Name U_ID_Vano U_Tipo U_Limite
    000000nz 000000nz 0000005u Picking 0.000000
    000000o1 000000o1 00000023 Picking 0.000000
    000000o2 000000o2 0000003c Picking 0.000000
    000000o3 000000o3 000002nt Picking 0.000000
    000000o4 000000o4 000004lp Picking 0.000000
    000000o5 000000o5 000002ra Picking 0.000000
    000000o6 000000o6 0000000a Picking 0.000000
    000000o7 000000o7 0000003m Picking 0.000000

    In un'altra tabella, che è in relazione con questa, il campo code è PK. Ma anche qui mi riesce difficile capire come estrarre l'ultimo record inserito.
  • Puoi o non puoi modificare la struttura delle tabelle?
  • No purtroppo non posso...
  • Neanche creare un "trigger after insert" ?
  • Nella TEORIA RELAZIONALE DEI DATI, su cui si basano i DATABASE RELAZIONALI, una TABELLA e' una RELAZIONE, e le RELAZIONI sono INSIEMI DI TUPLE (e la tupla corrisponde al RECORD: i termini sono diversi perche' ci sono subdole differenze concettuali che non vale la pena approfondire in questo momento).

    Un insieme NON HA ORDINE!!!!

    Per poter assicurare un ORDINE, SI DEVE aggiungere una colonna DEDICATA, che sia un ID, un timestamp, o qualunque altra cosa, OPPURE il record stesso contiene dei dati che permettono di forzare un ordine.

    Se la tabella e' in SOLO INSERIMENTO, POTREBBE ESSERE che, se scrivi

    SELECT * FROM <tabella>

    l'ULTIMO record della SELECT e' anche l'ULTIMO inserito: MA NESSUNO TI PUO' ASSICURARE questo fatto!!!!!
    Inoltre di devi scandire l'INTERA select per trovare l'ultimo record.


    DOMANDONA: ma sei sicuro che le colonne CODE e NAME non contengono un ID che si incrementa di volta in volta? A vederne il contenuto sembra proprio di si!

    Se cosi' fosse, allora la soluzione e' BANALE:

    SELECT TOP 1 * FROM <tabella> ORDER BY 'code' DESC;
  • Sicuramente la tabella CODE contiene un id ma si incrementa secondo regole che non conosco e che stanno all'interno del codice dell'applicativo che popola la tabella.
    Quindi SELECT TOP 1 * FROM <tabella> ORDER BY 'code' DESC non può funzionare.
    Conosco la TEORIA RELAZIONALE DEI DATI ecc... La mia domanda era per capire se esiste una funzione di SQL SERVER che riesce a rilevare l'ultima riga inserita in una tabella.
    Ma a quanto pare non c'è. Credo che mi arrangerò diversamente.
    Grazie a tutti per le risposte
Devi accedere o registrarti per scrivere nel forum
7 risposte