Как написать сценарий выполнения AS в хранимой процедуре в выделенном пуле Azure Synapse?

Я пытаюсь создать хранимую процедуру в выделенном пуле Azure Synapse, но сталкиваюсь с ошибкой. Я мало знаю об ограничениях Transact-SQL и Synapse, поэтому я не могу отлаживать реальную проблему здесь. Эта хранимая процедура является частью образца базы данных AdventureWorks2019 от Microsoft, и имя хранимой процедуры — HumanResources.uspUpdateEmployeeLogin.

Сценарий создания SP в SSMS:

      SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO


CREATE PROCEDURE [HumanResources].[uspUpdateEmployeeLogin]
    @BusinessEntityID [int], 
    @OrganizationNode [hierarchyid],
    @LoginID [nvarchar](256),
    @JobTitle [nvarchar](50),
    @HireDate [datetime],
    @CurrentFlag [dbo].[Flag]
WITH EXECUTE AS CALLER
AS
BEGIN
    SET NOCOUNT ON;

    BEGIN TRY
        UPDATE [HumanResources].[Employee] 
        SET [OrganizationNode] = @OrganizationNode 
            ,[LoginID] = @LoginID 
            ,[JobTitle] = @JobTitle 
            ,[HireDate] = @HireDate 
            ,[CurrentFlag] = @CurrentFlag 
        WHERE [BusinessEntityID] = @BusinessEntityID;
    END TRY
    BEGIN CATCH
        EXECUTE [dbo].[uspLogError];
    END CATCH;
END;
GO

Я пытаюсь запустить этот код с некоторыми изменениями в типах данных, которые не поддерживаются в синапсе.SQL-скрипт в Synapse:

      CREATE PROCEDURE [HumanResources].[uspUpdateEmployeeLogin]
    @BusinessEntityID [int], 
    @OrganizationNode [nvarchar](100),
    @LoginID [nvarchar](256),
    @JobTitle [nvarchar](50),
    @HireDate [datetime],
    @CurrentFlag [bit]


WITH EXECUTE AS CALLER
AS
BEGIN
    SET NOCOUNT ON;

    BEGIN TRY
        UPDATE [HumanResources].[Employee] 
        SET [OrganizationNode] = @OrganizationNode 
            ,[LoginID] = @LoginID 
            ,[JobTitle] = @JobTitle 
            ,[HireDate] = @HireDate 
            ,[CurrentFlag] = @CurrentFlag 
        WHERE [BusinessEntityID] = @BusinessEntityID;
    END TRY
    BEGIN CATCH
        EXECUTE [dbo].[uspLogError];
    END CATCH;
END;

Ошибка, которую я получаю:

      Parse error at line: 10, column: 1: Incorrect syntax near 'WITH'.

1 ответ

Synapse не поддерживает там предложение WITH (как отмечено его исключением в синтаксисе). Нужно ли вам использовать WITH EXECUTE AS CALLER? Вы пробовали просто удалить пункт?

EXECUTE AS CALLER в любом случае используется по умолчанию для хранимых процедур SQL Server, а Synapse не поддерживает никакой другой стиль.

      CREATE { PROC | PROCEDURE } [ schema_name.] procedure_name
    [ { @parameter data_type } [ OUT | OUTPUT ] ] [ ,...n ]
AS
{
  [ BEGIN ] sql_statement [;][ ,...n ] [ END ]
}
[;]

СОЗДАТЬ ПРОЦЕДУРУ — Synapse Analytics

Другие вопросы по тегам