es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Obteniendo un error de sintaxis incorrecta en el Procedimiento Almacenado con CTE.

Estoy tratando de crear un procedimiento almacenado donde necesito encontrar todas las últimas entradas de un número de distribuidor específico y luego obtener el conteo total según algunas condiciones. Lo he creado así:

CREATE PROCEDURE [dbo].[GetNotificationCount] @DealerNumber varchar(50),
                                              @NotificationCount int OUT
AS
BEGIN
    DECLARE @UserId varchar(50);
    WITH Notifications (RequestId, StatusId, RequestStatusId, UserId, row_num) AS
        (SELECT r.ID,
                rs.StatusID,
                rs.ID,
                r.UserID,
                ROW_NUMBER() OVER (PARTITION BY r.Id, rs.StatusID ORDER BY DateTimeStamp DESC) AS row_num
         FROM Requests r
              INNER JOIN RequestStatuses rs ON r.ID = rs.RequestID
         WHERE r.DealerNumber = @DealerNumber)
    Set @UserId = (Select Top 1 UserId from Requests where DealerNumber = @DealerNumber)
    SELECT @NotificationCount = COUNT(*)
    FROM Notifications n
         INNER JOIN Statuses s ON n.StatusId = s.ID
    WHERE n.row_num = 1
      AND n.StatusId IN (SELECT ID FROM Statuses WHERE DealerPortal = 'Additional Info Needed')
      AND n.RequestStatusId NOT IN (SELECT RequestStatusId FROM AdditionalInfoViewed WHERE UserId = @UserId);
END;

Pero estoy obteniendo un error de tiempo de compilación:

Error de sintaxis incorrecta cerca de la instrucción SET.

No estoy seguro de dónde me equivoqué. Por favor, sugiera.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que hay un error en el código. La línea:

    Set @UserId = (Select Top 1 UserId from Requests where DealerNumber = @DealerNumber)
    

    debe ser cambiada por:

    SELECT TOP 1 @UserId = UserId FROM Requests where DealerNumber = @DealerNumber
    

    Esta es la sintaxis correcta para asignar una variable con una instrucción SELECT en SQL Server.

    Una vez realizada esta actualización, el procedimiento almacenado debería compilar sin errores.

Comments are closed.