un pequeño error, cuando creas una tabla temporal esta queda en "memoria" hasta que se cierra la sesion que la invoco, por lo que si quieres correr de nuevo tu codigo tienes que dropear la tabla en cuestion, para evitar eso puedes dejar tu codigo asi:
Código SQL:
Ver originalDECLARE @nombre VARCHAR(MAX)
DECLARE @id INT
DECLARE @fecha DATE
DECLARE @x INT
DECLARE @Mensaje VARCHAR(MAX)
SET @fecha = CONVERT(CHAR(10),getdate(),126)
SET @x=1
IF OBJECT_ID('tempdb..#temp') IS NOT NULL
DROP TABLE #temp
SELECT *, IDENTITY(INT,1,1) AS rn INTO #temp FROM ProximoService WHERE FechaService=@fecha
while @x <= (SELECT COUNT(*) FROM #temp)
BEGIN
SELECT @nombre=Cliente,@id=UnidadEntregadaID FROM #temp WHERE rn=@x
SELECT @Mensaje = 'Proximo Service: ' + CHAR(13) + CHAR(10) + CHAR(13) + CHAR(10) +
'Cliente: ' + @nombre + CHAR(13) + CHAR(10) + CHAR(13) + CHAR(10) +
'ID Entregada: ' + @id
EXEC msdb.dbo.sp_send_dbmail @profile_name='Profile de prueba',
@subject = "Fecha Service",
@body = @Mensaje
UPDATE ProximoService
SET FechaService=DATEADD(DAY,10,FechaService)
WHERE UnidadEntregadaID=@id
SET @x=@x+1
END