Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Ayuda con Update

Estas en el tema de Ayuda con Update en el foro de SQL Server en Foros del Web. Hola a todos estoy haciendo un procedimiento almacenado y me da el siguiente error. Sintaxis incorrecta cerca de la palabra clave HAVING @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código ...
  #1 (permalink)  
Antiguo 30/05/2009, 15:51
 
Fecha de Ingreso: mayo-2009
Mensajes: 3
Antigüedad: 15 años
Puntos: 0
Ayuda con Update

Hola a todos estoy haciendo un procedimiento almacenado y me da el siguiente error. Sintaxis incorrecta cerca de la palabra clave HAVING

Código d:
Ver original
  1. CREATE PROCEDURE Aplica_descuentos @descuento INT
  2. AS
  3.  
  4. BEGIN TRY
  5.     DECLARE @newDTO DECIMAL(3,2)
  6.     SET @newDTO = ((@descuento/100)+1)
  7.     UPDATE Servicio
  8.         SET dto_max = dto_max * @newDTO
  9.     FROM Servicio sv
  10.         INNER JOIN ServicioxCliente sc ON sv.id_servicio=sc.id_servicio
  11.     HAVING COUNT(sc.id_servicio) < 10
  12.     COMMIT
  13.     PRINT 'Descuentos Aplicados Correctamente'
  14. END TRY
  15.  
  16. BEGIN CATCH
  17.     ROLLBACK
  18.     PRINT 'Ha ocurrido un error :(('
  19. END CATCH

Estoy haciendo un procedimiento almacenado en el cual le paso un porcentaje, y entonces se lo aplica a los servicios que han sido realizados menos de 10 veces,
haber si alguien me puede ayudar, seguramente será algun error de logica


Saludos
  #2 (permalink)  
Antiguo 30/05/2009, 17:15
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 9 meses
Puntos: 39
Respuesta: Ayuda con Update

Te falta GROUP BY.
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #3 (permalink)  
Antiguo 30/05/2009, 18:12
 
Fecha de Ingreso: mayo-2009
Mensajes: 3
Antigüedad: 15 años
Puntos: 0
Respuesta: Ayuda con Update

Código Consulta:
Ver original
  1. SELECT s.nombre AS "Nombre del Servicio",COUNT(sc.id_servicio) AS "Veces Realizado"
  2. FROM Servicio s
  3.     INNER JOIN ServicioxCliente sc ON s.id_servicio=sc.id_servicio
  4. GROUP BY s.nombre
  5. HAVING COUNT(sc.id_servicio)<10

Esta consulta si me funciona correctamente


Peroen el procedimiento almacenado le pongo GROUP BY sv.nombre (sv->servicio.nombre) y no me funciona poniendo group by me salta Sintaxis incorrecta cerca de la palabra clave 'GROUP'.

Código palmacenado:
Ver original
  1. CREATE PROCEDURE Aplica_descuentos @descuento INT
  2. AS
  3.  
  4. BEGIN TRY
  5.     DECLARE @newDTO DECIMAL(3,2)
  6.     SET @newDTO = ((@descuento/100)+1)
  7.     UPDATE Servicio
  8.         SET dto_max = dto_max * @newDTO
  9.     FROM Servicio sv
  10.         INNER JOIN ServicioxCliente sc ON sv.id_servicio=sc.id_servicio
  11.     GROUP BY sv.nombre
  12.     HAVING COUNT(sc.id_servicio) < 10
  13.    
  14.     COMMIT
  15.     PRINT 'Descuentos Aplicados Correctamente'
  16. END TRY
  17.  
  18. BEGIN CATCH
  19.     ROLLBACK
  20.     PRINT 'Ha ocurrido un error :(('
  #4 (permalink)  
Antiguo 31/05/2009, 17:37
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 9 meses
Puntos: 39
Respuesta: Ayuda con Update

La idea es esta:
Código sql:
Ver original
  1. UPDATE Servicio
  2.         SET dto_max = dto_max * @newDTO
  3. FROM Servicio sv
  4.     INNER JOIN (
  5.         SELECT s.id_servicio
  6.         FROM Servicio s
  7.             INNER JOIN ServicioxCliente sc ON s.id_servicio=sc.id_servicio
  8.         GROUP BY s.id_servicio
  9.         HAVING COUNT(sc.id_servicio)<10
  10.     ) T ON sv.id_servicio=T.id_servicio
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #5 (permalink)  
Antiguo 01/06/2009, 07:37
 
Fecha de Ingreso: mayo-2009
Mensajes: 3
Antigüedad: 15 años
Puntos: 0
Respuesta: Ayuda con Update

Gracias, funciona perfectament :D
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:22.