2010-10-05 18 views
19

¿Alguien puede encontrar mi error en esta consulta? Estoy usando SQL Server 2000 y quiero actualizar todas las entradas en la tabla CostEntry al valor correspondiente en la tabla ActiveCostDetails. La cláusula where SÍ funciona con una instrucción select.Sintaxis de consulta de actualización SQL con unión interna

UPDATE CostEntry CE 
INNER JOIN ActiveCostDetails As AD ON CostEntry.lUniqueID = ActiveCostDetails.UniqueID 
     SET CostEntry.sJobNumber = ActiveCostDetails.JobNumber 
    WHERE CostEntry.SEmployeeCode = '002' 
     AND SubString(CostCentre, 1, 1) = sDepartmentCode 
     AND substring(CostCentre, 3, 1) = sCategoryCode 
     AND substring(CostCentre, 5, 2) = sOperationCode 
+0

@OMG Ponies- Gracias por mirar, pero esta consulta tiene el mismo efecto que el original (no funciona debido a un error de sintaxis). Creo que esto se debe a que el servidor SQL ignora espacios y retornos de carro en una consulta. – MAW74656

+0

Acabo de cambiar el formato de lo que publicaste: más fácil de leer, más fácil de ayudar –

+0

Ok ponys, lo entiendo. Estaba trabajando en un ejemplo, en línea ... http://www.tek-tips.com/faqs.cfm?fid=1958 Pero tu camino es mejor. – MAW74656

Respuesta

40

Los SET tiene que venir antes de la porción FROM\JOIN\WHERE de la consulta.

UPDATE CE 
SET sJobNumber = AD.JobNumber 
FROM CostEntry CE 
    INNER JOIN ActiveCostDetails As AD 
     ON CE.lUniqueID = AD.UniqueID 
WHERE CE.SEmployeeCode = '002' 
    AND SubString(CostCentre, 1, 1) = sDepartmentCode 
    AND substring(CostCentre, 3, 1) = sCategoryCode 
    AND substring(CostCentre, 5, 2) = sOperationCode 
+0

+1: [Documentación de actualización de SS2000] (http://msdn.microsoft.com/en-us/library/aa260662%28SQL.80%29.aspx) –

+0

@Joe Stefanelli - Cerrar, pero al analizador no le gusta los nombres cuando se establece un alias. – MAW74656

+0

Esto funcionó: UPDATE SET CE CE.sJobNumber = AD.JobNumber DE CostEntry CE INNER JOIN ActiveCostDetails como AD EN CE.lUniqueID = AD.UniqueID DONDE CE.SEmployeeCode = '002' y substring (CostCentre, 1 , 1) = sDepartmentCode AND substring (CostCentre, 3, 1) = sCategoryCode AND substring (CostCentre, 5, 2) = sOperationCode – MAW74656

1

Esto debería funcionar

UPDATE CE 
SET CostEntry.sJobNumber = ActiveCostDetails.JobNumber 
FROM CostEntry CE 
INNER JOIN ActiveCostDetails As AD ON CostEntry.lUniqueID = ActiveCostDetails.UniqueID  
    WHERE CostEntry.SEmployeeCode = '002' 
     AND SubString(CostCentre, 1, 1) = sDepartmentCode 
     AND substring(CostCentre, 3, 1) = sCategoryCode 
     AND substring(CostCentre, 5, 2) = sOperationCode 
+2

Guau, vieja pregunta ... bastante vergonzoso que no sabía esto en aquel entonces ... – MAW74656

Cuestiones relacionadas