2015-09-24 6 views
5

Ho un enorme script SQL con molti batch (utilizzando GO).Interruzione dell'esecuzione di script sql

In determinate condizioni, voglio interrompere l'intera esecuzione di questo script.

Ho provato a utilizzare NOEXEC, ma continuo a ricevere errori di oggetto non validi, poiché il mio script include la creazione e l'aggiunta di dati a nuove tabelle e colonne.

Non voglio usare RAISERROR, c'è un altro modo per farlo?

+0

Non conosco un modo per farlo. Le istruzioni GO sono necessarie? Cercherò di renderlo un singolo batch e uscire da quello o trovare un modo per eseguire questi individues di batch (ad esempio Powershell o altro linguaggio di scripting, SSIS, metterli in stored procedure ecc.). – Goody

+0

Come stai eseguendo questo script? Management Studio? SQLCMD? Applicazione? –

+0

Lo sto eseguendo in studio di gestione –

risposta

4

Non ci sono buone soluzioni a questo problema. Un modo in cui è possibile condividere i dati tra i lotti sono le tabelle (permanenti o temporanee). Così si può avere una logica che dipende qualche stato di quel tavolo o il valore di particolari colonne nella tabella come questa:

--CREATE TABLE debug(col int) 
--INSERT INTO debug VALUES(1) 
--DELETE FROM debug 


SELECT 1 
GO 

SELECT 2 

SELECT 3 

GO 

IF EXISTS(SELECT * FROM debug) 
    SELECT 6 

GO 

Basta aggiungere IF EXISTS(SELECT * FROM debug) questa linea per ogni luogo nello script che si desidera saltare ea seconda il fatto che la tabella abbia alcune righe o meno che i blocchi di codice verranno eseguiti o meno.

+0

Sembra una buona soluzione, ma non avrà senso nella mia situazione dato che ho una sceneggiatura enorme e non è consigliabile aggiungere il controllo prima di ogni lotto. –

+3

@RandomUser, non hai alternative. –