2011-02-12 18 views
133

tengo un SQL ACTUALIZACIÓN muy básico -Cómo escribir UPDATE SQL con alias de tabla en SQL Server 2008?

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

Esta consulta funciona muy bien en Oracle, Derby, Mi-SQL - pero falla en el servidor SQL 2008 con el error siguiente: "Msg 102, Nivel 15, estado 1, línea 1 Sintaxis incorrecta cerca de 'Q'. "

Si elimino todas las apariciones del alias, "Q" de SQL, entonces funciona.

Pero necesito usar el alias.

+5

¿Por qué necesitas usar un alias? No parece que lo necesites. –

+4

Sí, desde la perspectiva de programación, no lo necesito. Pero tengo una biblioteca existente/antigua que genera todo tipo de SQL DML con alias de tabla. La biblioteca tiene muchas clases con un tipo de lógica compleja. Ahora deshacerse de alias de tabla en la biblioteca es más trabajo que ajustar la lógica existente para trabajar con MSSQL. También cuando hay varias tablas involucradas, necesito tener alias de tabla. – javauser71

Respuesta

268

La sintaxis para utilizar un alias en una instrucción de actualización en SQL Server es el siguiente:

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

El alias no debería ser necesario aquí, sin embargo.

+2

¡Sí! Funciona. Gracias por la rápida respuesta. Por casualidad, ¿sabe por qué el servidor MSSQL admite una sintaxis tan poco convencional para la actualización? – javauser71

+1

Mark Byers - ¡¡¡Gran respuesta !! Esta sintaxis me permite agregar una declaración de selección comentada, que me permite probar la actualización haciendo primero la selección (resaltar desde seleccionar y ejecutar): 'SET Q.TITLE = 'TEST' - SELECT *' –

+1

Nice . Esto hace que sea más fácil usar intellisense en la cláusula where. – Magnus

11

Siempre puede tomar el CTE, (Expresión tabular común), enfoque.

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

UPDATE updateCTE 
SET TITLE = 'TEST'; 
+0

Sí, también funciona. Pero para un programa JDBC/Java, este es un tipo de sintaxis compleja. Gracias por su respuesta. – javauser71