2010-07-13 17 views
23

Esiste una parola chiave dichiarazione vuota in T-SQL in SQL Server 2005 o versione successiva? Qualcosa come la dichiarazione NULL in PL/SQL.Istruzione vuota in T-SQL

+9

Cosa stai cercando di ottenere? – cjk

risposta

1

No. Non c'è un equivalente "Nessuna operazione".

  • Per un proc memorizzato, avresti almeno SET NOCOUNT ON.
  • Per un IF/ELSE, se una condizione è omettere svuotarla

In caso contrario, perché me lo chiedi per favore? Per essere precisi, qual è il punto?

+1

OK. Grazie. Ne ho bisogno per il mio generatore SQL. Ma comunque sembra che io debba rimuovere un ramo vuoto (IF/ELSE, CASE) prima, dai miei oggetti intermedi. Ho trovato che un'istruzione vuota può essere "emulata" da un blocco vuoto (BEGIN END) ma non ha un bell'aspetto. – ternyk

6

a volte succede brutto. Credo che il loro sia un uso valido. In una lunga e complicata struttura di ramificazione delle decisioni con diverse dichiarazioni if ​​else, alcune di queste affermazioni possono contenere condizioni in cui non desideri esplicitamente alcuna azione. Inoltre, non vuoi che queste condizioni cadano con il default altrimenti, dove viene svolto un determinato lavoro. In tal caso, è un uso valido.

Qui ci sono due modi per farlo - vedi B e C

Declare @status as char(1) 
set @status = 'D' 

If (@status = 'A') 
    select 'Great!' 

Else if (@status = 'B') 
begin 
    if null=null select null -- predicate never resolves true 
end 

Else if (@status = 'C') 
    set @status = @status -- set a variable to itself 

Else 
    select 'Needs work!' 

Nota, questo è un esempio troppo semplificata. È meglio utilizzato per la leggibilità quando le condizioni sono complesse.

+0

yep penso che il valore "if null = null select null" sia il più vicino possibile ai casi // NOOP vuoti in un normale linguaggio di tipo C – syclee

+0

Mi piace molto la versione 'if null = null select null', perché è ripetibile all'interno di un ambito , nel caso in cui questo debba essere fatto più spesso e non ha effetti collaterali –

7

Credo anche che a volte ci siano usi legittimi per uno script di niente (gli script generati automaticamente, ad esempio).

Anche se è un thread vecchio, inserirò i miei due centesimi. Penso che dichiarare una variabile sia una delle affermazioni più favorevoli che puoi usare. La dichiarazione non viene nemmeno visualizzata nei piani di esecuzione:

IF (@variable = 0) 
BEGIN 
    DECLARE @placeHolder BIT; 
END 
34

È possibile dichiarare un'etichetta per non fare nulla.

DECLARE @value INT 

IF @value IS NULL 
BEGIN 
no_op1: 
END 
+1

Grazie, penso che questo sia il modo migliore per non fare nulla perché in realtà non fa nulla, è solo dichiarativo. Lo userò per la traduzione automatica del codice di procedura memorizzato da Firebird a SQL-Server, perché Firebird consente blocchi vuoti mentre SQL-Server no. Almeno per i casi in cui il blocco iniziale non può essere rimosso banalmente. –

+1

Grande. E nota che la stessa etichetta non può essere definita più di una volta. Ecco perché dovresti nominarla come no_op1 2 3 ... – sotn