スキーマバインドUDFを作成したことがある場合は、スキーマバインドはWITH SCHEMABINDING
を追加するだけでよいことがわかります。 あなたの定義に。スキーマバインドビューを作成する場合も同じです。
ストアドプロシージャは少し異なります。
スキーマにバインドできるのは、ネイティブにコンパイルされたストアドプロシージャのみです。実際、ネイティブにコンパイルされたストアドプロシージャは必須 スキーマにバインドされます。スキーマをバインドせずに、ネイティブにコンパイルされたストアドプロシージャを作成することはできません。
ただし、通常の(ネイティブにコンパイルされていない)プロシージャをスキーマバインドしようとすると、エラーが発生します。
スキーマバインドストアドプロシージャの例
スキーマにバインドされた(ネイティブにコンパイルされた)ストアドプロシージャを作成する例を次に示します。
CREATE PROCEDURE dbo.usp_GetCowsByName @cowname varchar(70)WITH SCHEMABINDING、NATIVE_COMPILATIONASBEGIN ATOMIC WITH(TRANSACTION ISOLATION LEVEL =SNAPSHOT、LANGUAGE =N'us_english')SELECT CowId、CowName、PhoneFROM dbo.CowsWHER / pre>
WITH SCHEMABINDING
を含めました 引数ですが、NATIVE_COMPILATION
も含めました 、これは、プロシージャがネイティブにコンパイルされていることを示します。
ATOMIC WITH
にも注目してください ブロック。これは、ネイティブにコンパイルされたストアドプロシージャに必要です。このコードは、スキーマにバインドされたストアドプロシージャを作成しました。
エラー?これらの前提条件を確認してください
ネイティブにコンパイルされたストアドプロシージャでは、基になるテーブルがメモリ最適化テーブルである必要があります。
メモリ最適化テーブルを作成するには、最初にメモリ最適化ファイルグループを作成する必要があります。
これは、メモリ最適化ファイルグループ、それに関連するファイル、およびストアドプロシージャで参照するメモリ最適化テーブルを作成するために使用したコードです。
ALTER DATABASE Test ADD FILEGROUP imoltp_test CONTAINS MEMORY_OPTIMIZED_DATA; GOALTER DATABASE Test ADD FILE(name ='imoltp_test1'、filename ='/var/opt/mssql/data/imoltp_test1.mdf')TO FILEGROUP imoltp_test; GOCREATE TABLE [dbo] 。[Cows]([CowId] [int] IDENTITY(1,1)NOT NULL PRIMARY KEY NONCLUSTERED、[CowName] [varchar](70)NULL、[Phone] [varchar](10)NULL)WITH(MEMORY_OPTIMIZED =ON 、DURABILITY =SCHEMA_AND_DATA)GOしたがって、私のコードをコピーして貼り付ける場合は、最初にこれを実行してから、上記のストアドプロシージャコードを実行する必要があります。
また、私はLinux用のSQL Serverを使用しているため、ファイルパスはLinuxの規則を使用していることに注意してください。 Windowsでデータベースファイルを作成する場合は、Windowsのファイルパス規則を使用するようにデータベースファイルを変更する必要があります(システムに存在するファイルパスを使用するようにしてください)。