Buscar..


Procedimiento almacenado nativamente compilado

En un procedimiento con compilación nativa, el código T-SQL se compila a dll y se ejecuta como código C nativo. Para crear un procedimiento almacenado nativo compilado, necesita:

  • Utilice la sintaxis estándar de CREAR PROCEDIMIENTO
  • Establecer la opción NATIVE_COMPILATION en la definición de procedimiento almacenado
  • Utilice la opción SCHEMABINDING en la definición de procedimiento almacenado
  • Defina la opción EJECUTAR COMO PROPIETARIO en la definición de procedimiento almacenado

En lugar del bloque BEGIN END estándar, necesita usar el bloque BEGIN ATOMIC:

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

Ejemplo:

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

Función escalar compilada de forma nativa

El código en la función compilada de forma nativa se transformará en código C y se compilará como dll. Para crear una función escalar compilada nativa necesitas:

  • Utilice la sintaxis estándar de CREATE FUNCTION
  • Establecer la opción NATIVE_COMPILATION en la definición de la función
  • Utilice la opción SCHEMABINDING en la definición de la función

En lugar del bloque BEGIN END estándar, necesita usar el bloque BEGIN ATOMIC:

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

Ejemplo:

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)

Función de valor de tabla en línea nativa

La función de valor de tabla compilada nativa devuelve tabla como resultado. El código en la función compilada de forma nativa se transformará en código C y se compilará como dll. Solo las funciones con valor de tabla en línea son compatibles con la versión 2016. Para crear una función de valor de tabla nativa, necesita:

  • Utilice la sintaxis estándar de CREATE FUNCTION
  • Establecer la opción NATIVE_COMPILATION en la definición de la función
  • Utilice la opción SCHEMABINDING en la definición de la función

En lugar del bloque BEGIN END estándar, necesita usar el bloque BEGIN ATOMIC:

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

Ejemplo:

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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow