Verificare i dati prima di salvarli

domenica 30 dicembre 2012 - 17.07
Tag Elenco Tags  Windows Server 2008 R2

Zagor60 Profilo | Junior Member

salve,

è possibile in sqlserver 2008 verificare che un dato non sia già presente in una tabella prima di essere salvato ?
se si come?
grazie anticipatamente

Saluti

renarig Profilo | Expert

La cosa piu brutta ( ma funziona ) è quella di aggiungere un indice
univoco alla tua colonna

____________________________________________________________

Un po piu bello ( ma non molto ) fai un Trigger
che verifica quello che vuoi e esegue le operazioni
che preferisci

_______________________________________________________________

a parer mio la cosa migliore è che sia la applicazione a fare
le verifiche che ti interessano

e a inserire i dati solo se le verifiche sono Ok

______________________________________________


.

Zagor60 Profilo | Junior Member

salve,
La cosa piu brutta ( ma funziona ) è quella di aggiungere un indice
univoco alla tua colonna

- questo l'ho fatto

____________________________________________________________

Un po piu bello ( ma non molto ) fai un Trigger
che verifica quello che vuoi e esegue le operazioni
che preferisci

-- questo non so come si usa
_______________________________________________________________

a parer mio la cosa migliore è che sia la applicazione a fare
le verifiche che ti interessano

e a inserire i dati solo se le verifiche sono Ok

---questo l'ho fatto

-- pensavo che in sql server ci fosse un'altro sistema

cmq grazie

ma_di Profilo | Junior Member

Ciao, se ho capito bene la domanda
hai provato con
IF EXISTS (SELECT * FROM t1 WHERE xxx = yyy )
BEGIN
.
.
.

alx_81 Profilo | Guru

>Ciao, se ho capito bene la domanda
>hai provato con
>IF EXISTS (SELECT * FROM t1 WHERE xxx = yyy )
>BEGIN
Ciao,
l'importante in questa soluzione è che il predicato espresso nella where sia opportunamente indicizzato, per fare in modo di non dover "perdere" troppo tempo nel testare l'esistenza del valore in tabella. Siccome parliamo di 2008 inoltre, c'è uno statement che può essere usato proprio per una gestione dei dati esistenti o meno.
Ad esempio, se il tuo caso è
SE ESISTE AGGIORNA (o non fare nulla) ALTRIMENTI INSERISCI, puoi (oltre a quella if proposta, che mi sembra una buona strada da seguire) utilizzare il MERGE statement.
Questo di consente anche di inserire dati in maniera tabellare (qualora tu debba fare più di un inserimento, riducendo quindi il roundtrip a server passando invece delle tabelle).
La guida è qui: http://technet.microsoft.com/en-us/library/bb510625.aspx

Come dicevo però, quella IF proposta è ottima, cerca di fare in modo che i campi di controllo siano indicizzati e che non creino problemi alle performance della tua query.
Il trigger invece non lo trovo il massimo della vita per una serie di motivi:
- transazione allungata
- gestione dell'errore riduttiva
- invisibilità dell'oggetto (devi ricordarti che esiste, mentre una logica di business visibile da codice è più manutenibile
- forse uno strumento troppo basso livello per la gestione di questa casistica

Buon Anno!
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.microsoft.com/profiles/Alessandro.Alpi

Zagor60 Profilo | Junior Member

Grazie Proverò

Auguri di buon anno anche a te e a tutto il team .
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5