Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2013
    Messaggi
    47

    [SQL SERVER] Forzare un valore in campo se vuoto

    Salve, in una tabella in cui scrivono diversi programmi ho due campi contenenti una data (DT1 e DT2).
    Il campo DT1 è sempre impostato, il campo DT2 può arrivare vuoto. E' possibile fare in modo che, nel caso sia vuoto DT2 sia impostato uguale a DT1?
    Grazie

  2. #2

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2013
    Messaggi
    47
    NULL, grazie.

  4. #4
    Utente di HTML.it L'avatar di comas17
    Registrato dal
    Apr 2002
    Messaggi
    6,522
    Tipicamente si può fare tramite trigger o funzione che va a vedere il valore inserito (o aggiornato) nella prima colonna e lo copia nella seconda

    Prova ad ispirarti qui: http://stackoverflow.com/questions/7...another-column

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2013
    Messaggi
    47
    Ho letto qualcosa e provato a creare un trigger:


    CREATE TRIGGER prova
    ON scadenze
    AFTER INSERT
    AS

    IF [DATA2] IS NULL
    BEGIN
    SET [DATA2] = [DATA1]
    END;

    dove DATA1 è una data sempre impostata però mi da errore sul segno =

    In cosa sbaglio?

    Grazie

  6. #6
    Utente di HTML.it L'avatar di comas17
    Registrato dal
    Apr 2002
    Messaggi
    6,522
    Quote Originariamente inviata da chigibi Visualizza il messaggio
    Ho letto qualcosa e provato a creare un trigger:

    In cosa sbaglio?

    Grazie
    In varie cose

    Se il trigger lo fai dopo l'insert (ed è giusto) il tuo record è già effettivamente stato inserito nel database quindi dovrai andare a fare un'operazione di update dell'ultimo record inserito, aggiornando il valore della colonna data2 (ed impostandola uguale a quella che ha la colonna data1 dell'ultimo record inserito)

    Ovviamente dovrai aggiornare il campo data2 solamente dell'ultimo record inserito (e non tutti quelli eventualmente già presenti).

    Per trovare l'ultimo record inserito nei trigger si può usare la parola "inserted" (che indica, appunto, l'ultima cosa inserita)

    Il tuo trigger potrebbe quindi essere qualcosa del tipo (l'ho scritto senza pensarci troppo, si può ovviamemte migliorare, non fosse altro perchè ci sono 2 query identiche e quindi si potrebbe utilizzare una variabile di appoggio)

    CREATE TRIGGER [dbo].[test_trg]
    ON scadenze
    AFTER insert
    AS
    BEGIN

    if (select data2 from inserted) is null

    update scadenze set data2 = (select data1 from inserted) where data1 = (select data1 from inserted)

    END

  7. #7
    si può mettere come default del campo data2 il valore di data1, oppure farlo ex-post con update tabella set data2=data1 where data2 is null

  8. #8
    Utente di HTML.it L'avatar di comas17
    Registrato dal
    Apr 2002
    Messaggi
    6,522
    Quote Originariamente inviata da optime Visualizza il messaggio
    si può mettere come default del campo data2 il valore di data1,
    Non mi risulta si possa, o meglio ci avevo provato ad inserire "data1" come indicazione di default del campo "data2" ma mi dava errore. Tu ci sei riuscito ?

    oppure farlo ex-post con update tabella set data2=data1 where data2 is null
    che è esattamente quello che fa il trigger, facendo attenzione che si vuole andare ad aggiornare uno specifico record (quello appena inserito) con una specifica data (il data1 di quello appena inserito)
    Ultima modifica di comas17; 23-11-2014 a 14:27

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.