sql >> データベース >  >> RDS >> Sqlserver

SQLServerでスキーマバインドされたストアドプロシージャを作成する方法

    スキーマバインド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のファイルパス規則を使用するようにデータベースファイルを変更する必要があります(システムに存在するファイルパスを使用するようにしてください)。


    1. Magicbricksは大量のトラフィックをサポートするためにMariaDBに移行します

    2. クラスcom.mysql.jdbc.Driver...を読み込んでいますが非推奨のメッセージです

    3. スウェーデンの新しい電子IDFrejaeIDの背後にあるデータベースの自動化

    4. SQLServerの緊急モードからデータベースを回復する