每次尝试运行进程时,我都收到以下错误...'END'附近的语法不正确


CREATE PROCEDURE [dbo].[SP_StoredProc_Status] @Procname varchar(50)
AS
BEGIN
    ---- SET NOCOUNT ON added to prevent extra result sets from interfering with SELECT 
    SET NOCOUNT ON;
    SET DATEFORMAT dmy;
    BEGIN TRY
        -- Check if the procedure is already running.
        -- This check is MANDATORY in all stored procs.
        IF EXISTS (
                SELECT *
                FROM IMP_StoredProcRunTracking
                WHERE StoredProcName = @Procname
                    AND DATEADD(hh, 1, ISNULL(StartedAt, DATEADD(year, - 50, GETDATE()))) > GETDATE()
                )
            BEGIN
                RETURN
            END
        ELSE
            BEGIN
                MERGE INTO IMP_StoredProcRunTracking AS Target
                USING (
                    SELECT @procname StoredProcName
                    ) AS Source
                    ON Target.StoredProcName = Source.StoredProcName
                WHEN MATCHED
                    THEN
                        UPDATE
                        SET Target.StartedAt = GETDATE()
                WHEN NOT MATCHED
                    THEN
                        INSERT (
                            StoredProcName
                            ,StartedAt
                            )
                        VALUES (
                            @Procname
                            ,GETDATE()
                            );
                        end
    END

您缺少一个end try/begin catch/end catch来实际处理您已经开始的异常处理

Create PROCEDURE [dbo].[SP_StoredProc_Status] @Procname varchar(50)
AS
BEGIN
    ---- SET NOCOUNT ON added to prevent extra result sets from interfering with SELECT 
    SET NOCOUNT ON;
    SET DATEFORMAT dmy;
    BEGIN TRY
        -- Check if the procedure is already running.
        -- This check is MANDATORY in all stored procs.
        IF EXISTS (
                SELECT *
                FROM IMP_StoredProcRunTracking
                WHERE StoredProcName = @Procname
                    AND DATEADD(hh, 1, ISNULL(StartedAt, DATEADD(year, - 50, GETDATE()))) > GETDATE()
                )
            BEGIN
                RETURN
            END
        ELSE
            BEGIN
                MERGE INTO IMP_StoredProcRunTracking AS Target
                USING (
                    SELECT @procname StoredProcName
                    ) AS Source
                    ON Target.StoredProcName = Source.StoredProcName
                WHEN MATCHED
                    THEN
                        UPDATE
                        SET Target.StartedAt = GETDATE()
                WHEN NOT MATCHED
                    THEN
                        INSERT (
                            StoredProcName
                            ,StartedAt
                            )
                        VALUES (
                            @Procname
                            ,GETDATE()
                            );
                        end

    END TRY
    BEGIN CATCH
    -- Execute error retrieval routine.
    END CATCH
END

最新更新