サーチ…


ネイティブにコンパイルされたストアドプロシージャ

ネイティブコンパイルの手順では、T-SQLコードはdllにコンパイルされ、ネイティブCコードとして実行されます。ネイティブコンパイルストアドプロシージャを作成するには、以下を行う必要があります。

  • 標準のCREATE PROCEDURE構文を使用する
  • ストアドプロシージャ定義でNATIVE_COMPILATIONオプションを設定する
  • ストアドプロシージャ定義でSCHEMABINDINGオプションを使用する
  • ストアドプロシージャ定義でEXECUTE AS OWNERオプションを定義する

標準BEGIN ENDブロックの代わりに、BEGIN ATOMICブロックを使用する必要があります。

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

例:

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

ネイティブにコンパイルされたスカラー関数

ネイティブにコンパイルされた関数のコードはCコードに変換され、dllとしてコンパイルされます。ネイティブ・コンパイルされたスカラー関数を作成するには、以下が必要です。

  • 標準のCREATE FUNCTION構文を使用する
  • 関数定義でNATIVE_COMPILATIONオプションを設定する
  • 関数定義でSCHEMABINDINGオプションを使用する

標準BEGIN ENDブロックの代わりに、BEGIN ATOMICブロックを使用する必要があります。

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

例:

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)

ネイティブインラインテーブル値関数

ネイティブコンパイルされたテーブル値関数は結果としてテーブルを返します。ネイティブにコンパイルされた関数のコードはCコードに変換され、dllとしてコンパイルされます。インラインテーブル値関数のみがバージョン2016でサポートされています。ネイティブテーブル値関数を作成するには、以下を行う必要があります。

  • 標準のCREATE FUNCTION構文を使用する
  • 関数定義でNATIVE_COMPILATIONオプションを設定する
  • 関数定義でSCHEMABINDINGオプションを使用する

標準BEGIN ENDブロックの代わりに、BEGIN ATOMICブロックを使用する必要があります。

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

例:

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
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow