Ricerca…


Stored procedure compilate in modo nativo

In una procedura con compilazione nativa, il codice T-SQL viene compilato in dll ed eseguito come codice C nativo. Per creare una stored procedure compilata nativa è necessario:

  • Utilizzare la sintassi standard CREATE PROCEDURE
  • Imposta l'opzione NATIVE_COMPILATION nella definizione della stored procedure
  • Utilizzare l'opzione SCHEMABINDING nella definizione della stored procedure
  • Definisci l'opzione ESEGUI COME PROPRIETARIO nella definizione della procedura memorizzata

Invece del blocco BEGIN END standard, è necessario utilizzare il blocco BEGIN ATOMIC:

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

Esempio:

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

Funzione scalare nativamente compilata

Il codice nella funzione compilata in modo nativo verrà trasformato in codice C e compilato come dll. Per creare una funzione scalare nativa compilata è necessario:

  • Usa la sintassi CREATE FUNCTION standard
  • Imposta l'opzione NATIVE_COMPILATION nella definizione della funzione
  • Utilizzare l'opzione SCHEMABINDING nella definizione della funzione

Invece del blocco BEGIN END standard, è necessario utilizzare il blocco BEGIN ATOMIC:

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

Esempio:

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)

Funzione valore di tabella inline nativa

La funzione valore di tabella compilato nativo restituisce la tabella come risultato. Il codice nella funzione compilata in modo nativo verrà trasformato in codice C e compilato come dll. Nella versione 2016 sono supportate solo le funzioni con valori di tabella incorporati. Per creare una funzione di valore di tabella nativa è necessario:

  • Usa la sintassi CREATE FUNCTION standard
  • Imposta l'opzione NATIVE_COMPILATION nella definizione della funzione
  • Utilizzare l'opzione SCHEMABINDING nella definizione della funzione

Invece del blocco BEGIN END standard, è necessario utilizzare il blocco BEGIN ATOMIC:

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

Esempio:

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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow