Recherche…


Procédure stockée compilée nativement

Dans une procédure avec compilation native, le code T-SQL est compilé en dll et exécuté en code C natif. Pour créer une procédure stockée compilée native, vous devez:

  • Utilisez la syntaxe standard CREATE PROCEDURE
  • Définissez l'option NATIVE_COMPILATION dans la définition de procédure stockée
  • Utilisez l'option SCHEMABINDING dans la définition de procédure stockée
  • Définir l'option EXECUTE AS OWNER dans la définition de procédure stockée

Au lieu du bloc standard BEGIN END, vous devez utiliser le bloc BEGIN ATOMIC:

BEGIN ATOMIC
   WITH (TRANSACTION ISOLATION LEVEL=SNAPSHOT, LANGUAGE='us_english')
   -- T-Sql code goes here
END

Exemple:

CREATE PROCEDURE usp_LoadMemOptTable (@maxRows INT, @FullName NVARCHAR(200))
WITH
    NATIVE_COMPILATION, 
    SCHEMABINDING, 
    EXECUTE AS OWNER
AS
BEGIN ATOMIC
WITH (TRANSACTION ISOLATION LEVEL=SNAPSHOT, LANGUAGE='us_english')
    DECLARE @i INT = 1
    WHILE @i <= @maxRows
    BEGIN
        INSERT INTO dbo.MemOptTable3 VALUES(@i, @FullName, GETDATE())
        SET @i = @i+1
    END
END
GO

Fonction scalaire compilée nativement

Le code dans la fonction compilée nativement sera transformé en code C et compilé en dll. Pour créer une fonction scalaire native compilée, vous devez:

  • Utiliser la syntaxe standard CREATE FUNCTION
  • Définissez l'option NATIVE_COMPILATION dans la définition de fonction
  • Utilisez l'option SCHEMABINDING dans la définition de fonction

Au lieu du bloc standard BEGIN END, vous devez utiliser le bloc BEGIN ATOMIC:

BEGIN ATOMIC
   WITH (TRANSACTION ISOLATION LEVEL=SNAPSHOT, LANGUAGE='us_english')
   -- T-Sql code goes here
END

Exemple:

CREATE FUNCTION [dbo].[udfMultiply]( @v1 int, @v2 int )   
RETURNS bigint 
WITH NATIVE_COMPILATION, SCHEMABINDING  
AS   
BEGIN ATOMIC WITH (TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE = N'English')  
  
    DECLARE @ReturnValue bigint;  
    SET @ReturnValue = @v1 * @v2;         
  
    RETURN (@ReturnValue);    
END 

-- usage sample:
SELECT dbo.udfMultiply(10, 12)

Fonction de valeur de table inline native

La fonction de valeur de table compilée native renvoie la table en tant que résultat. Le code dans la fonction compilée nativement sera transformé en code C et compilé en dll. Seules les fonctions de table en ligne sont prises en charge dans la version 2016. Pour créer une fonction de valeur de table native, vous devez:

  • Utiliser la syntaxe standard CREATE FUNCTION
  • Définissez l'option NATIVE_COMPILATION dans la définition de fonction
  • Utilisez l'option SCHEMABINDING dans la définition de fonction

Au lieu du bloc standard BEGIN END, vous devez utiliser le bloc BEGIN ATOMIC:

BEGIN ATOMIC
   WITH (TRANSACTION ISOLATION LEVEL=SNAPSHOT, LANGUAGE='us_english')
   -- T-Sql code goes here
END

Exemple:

CREATE FUNCTION [dbo].[udft_NativeGetBusinessDoc]
(
   @RunDate VARCHAR(25)
)
RETURNS TABLE
WITH SCHEMABINDING,
     NATIVE_COMPILATION
AS
     RETURN
(
    SELECT BusinessDocNo,
           ProductCode,
           UnitID,               
           ReasonID,
           PriceID,
           RunDate,
           ReturnPercent,
           Qty,
           RewardAmount,
           ModifyDate,
           UserID
    FROM dbo.[BusinessDocDetail_11]
    WHERE RunDate >= @RunDate
);


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow