2010-08-24 17 views
8

Ho uno script SQL da eseguire su un database di grandi dimensioni. Mi piacerebbe mettere un paio di semplici domande all'inizio, proprio come un controllo di sanità mentale.Asserzione in MySQL

C'è un modo per scrivere un'affermazione in MySQL? O qualsiasi tipo di "selezionare ..., e se non corrisponde a questo valore, quindi interrompere l'intero script"?

+0

Ulteriori dettagli: cosa si intende utilizzare esattamente per la logica decisionale: una tabella, una colonna, un valore specifico? –

+1

Sono un po 'flessibile su questo punto, dal momento che voglio solo assicurarmi che sia il database giusto, e che i dati non siano terribilmente sbagliati. Guardare un conteggio (*) o un minimo (campo) (in un particolare intervallo), o assicurarti che il campo <> 'const', o qualcosa del genere, sarebbe fantastico. – Ken

risposta

3

Si potrebbe mettere l'intero script in un'istruzione if, a seconda del tipo di valore è necessario controllare, ecco un esempio:

DECLARE @value int 
SET @value = (SELECT COUNT(*) FROM dbo) 

IF @value >0 
BEGIN 
--Do Stuff Here 
END 
+2

MySQL non consente il flusso di controllo al di fuori dei programmi memorizzati, in modo frustrante. – Deebster

+0

@Brett, Questo non funziona per MySQL. Vedi le risposte qui sotto. – Pacerier

1

si può anche fare questo attraverso una procedura/funzione memorizzata, come nell'esempio seguente:

CREATE FUNCTION `RunProcess`() RETURNS INT(11) 
runProcess:BEGIN 

DECLARE check_value INT; 
DECLARE error_code INT; 

SELECT COUNT(*) FROM dbo INTO check_value; 

IF check_value = 0 THEN set error_code = 666; 
    LEAVE runProcess; 
    RETURN error_code; 
END IF; 

... 
... 
END; 
+0

Questo potrebbe creare qualche problema se stai provando ad eseguire anche altri sproc ........... – Pacerier

5

Un pazzo codice. Il punto principale è: SET potrebbe generare un errore per le variabili mysql.

Ad esempio.

SET @value = 0; 
SET SESSION sql_mode = if(@value, @@SESSION.sql_mode, 'something wrong uphere'); 

Produrrà ERROR 1231 (42000): Variable 'sql_mode' can't be set to the value of 'something wrong uphere' e l'esecuzione verrà interrotta.

Questo approccio non è semantico ma funziona.

+0

~ geniale! Quali sono alcuni altri trucchi? – Pacerier

Problemi correlati