2011-02-12 5 views
133

Ho un UPDATE SQL molto di base -Come scrivere UPDATE SQL con l'alias di tabella in SQL Server 2008?

UPDATE HOLD_TABLE Q SET Q.TITLE = 'TEST' WHERE Q.ID = 101; 

Questa query funziona benissimo in Oracle, Derby, My-Sql - ma riesce in assistente 2008 SQL con seguente errore: "Msg 102, Livello 15, stato 1, riga 1 Sintassi errata vicino a "Q". "

Se rimuovo tutte le occorrenze dell'alias, "Q" da SQL allora funziona.

Ma ho bisogno di usare l'alias.

+5

Perché è necessario utilizzare un alias? Non sembra che tu ne abbia bisogno. –

+4

Sì, dal punto di vista della programmazione non ne ho bisogno. Ma ho una vecchia libreria esistente che genera tutti i tipi di SQL DML con alias di tabella. La biblioteca ha molte classi con una sorta di logica complessa. Ora sbarazzarsi degli alias di tabella nella libreria è più utile della modifica della logica esistente per lavorare con MSSQL. Anche quando sono coinvolte più tabelle, ho bisogno di avere un alias di tabella. – javauser71

risposta

268

La sintassi per l'utilizzo di un alias in un'istruzione di aggiornamento su SQL Server è la seguente:

UPDATE Q 
SET Q.TITLE = 'TEST' 
FROM HOLD_TABLE Q 
WHERE Q.ID = 101; 

L'alias non dovrebbe essere necessario qui però.

+2

Sì !!! Funziona. Grazie per la risposta rapida. Per caso sai perché il server MSSQL supporta tale sintassi non convenzionale per l'aggiornamento? – javauser71

+1

Mark Byers - Ottima risposta !! Questa sintassi mi consente di aggiungere un'istruzione Select commentata, che mi permette di testare l'aggiornamento eseguendo prima la selezione (evidenziazione dalla selezione giù ed esegui): 'SET Q.TITLE = 'TEST' - SELEZIONA *' –

+1

Nice . Ciò rende più facile l'uso di intellisense nella clausola where. – Magnus

11

È sempre possibile utilizzare l'approccio CTE (Common Tabular Expression).

;WITH updateCTE AS 
(
    SELECT ID, TITLE 
    FROM HOLD_TABLE 
    WHERE ID = 101 
) 

UPDATE updateCTE 
SET TITLE = 'TEST'; 
+0

Sì, funziona anche. Ma per un programma JDBC/Java questa è una sorta di sintassi complessa. Grazie per la risposta. – javauser71

Problemi correlati