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

SQLServer2017でストアドプロシージャを作成する

    ストアドプロシージャは、1つにコンパイルされたSQLステートメントのグループです。ストアドプロシージャには、ビジネスロジックやその他のプログラミング構造を含めることができます。

    SQL Serverでは、ストアドプロシージャは、1つ以上のTransact-SQLステートメントのグループ、またはMicrosoft .NET Frameworkの共通ランタイム言語(CLR)メソッドへの参照です。

    プログラマビリティ

    ストアドプロシージャは、単なる長いスクリプトではありません。これは、特に ストアドプロシージャ の下でSQLServerに保存されたスクリプトです。 ノード、およびそれはできます:

    • 入力パラメーターを受け入れます(そして、呼び出し側プログラムに出力パラメーターの形式で複数の値を返します)。
    • プログラミングステートメントが含まれています。
    • ステータス値を呼び出し元のプログラムに返し、成功または失敗、および失敗の理由を示します。

    ストアドプロシージャには、多くの場合、ビジネスロジックが含まれています。たとえば、ストアドプロシージャは、渡されたパラメータを受け入れ、IFを使用してそれらのパラメータに対してテストできます。 ステートメント。たとえば、パラメータが1つの値の場合はこれを行い、別の値の場合はこれを行います。

    ストアドプロシージャは、作成されるとすぐに解析および最適化されてからメモリに格納されるため、アプリケーションのパフォーマンスを向上させることができます。ストアドプロシージャを介した条件付きクエリの実行は非常に高速です。ネットワークを介してSQLServerにクエリを送信し、ネットワークを介してすべてのデータを返し、フィルタリングして選択できるアプリケーションと比較して、関心のあるレコードのみ。

    ストアドプロシージャの利点

    ストアドプロシージャを使用する主な利点のいくつかを次に示します。

    メリット 説明
    モジュラープログラミング ストアドプロシージャを一度作成してから、アプリケーションのさまざまな部分から(さらには複数のアプリケーションからでも)何度も呼び出すことができます。
    パフォーマンス ストアドプロシージャは、コードの実行を高速化し、ネットワークトラフィックを削減します。
    • より高速な実行:ストアドプロシージャは、作成されてメモリに格納されるとすぐに解析および最適化されます。これは、アプリケーションからSQLServerにSQLコードの多くの行を送信するよりもはるかに高速に実行されることを意味します。そのためには、SQLServerが実行するたびにSQLコードをコンパイルして最適化する必要があります。
    • ネットワークトラフィックの削減:ネットワークを介してSQLコードの多くの行をSQL​​ Serverに送信すると、ネットワークのパフォーマンスに影響します。これは、数百行のSQLコードがある場合や、アプリケーションで多くのアクティビティがある場合に特に当てはまります。 SQL Serverで(ストアドプロシージャとして)コードを実行すると、このコードをネットワーク経由で送信する必要がなくなります。唯一のネットワークトラフィックは、提供されたパラメータとクエリの結果です。
    セキュリティ ユーザーは、ステートメントを直接実行しなくても、ストアドプロシージャを実行できます。したがって、ストアドプロシージャは、通常はこれらのタスクにアクセスできないユーザーに高度なデータベース機能を提供できますが、この機能は厳密に制御された方法で利用できるようになります。

    ストアドプロシージャを作成する方法

    ストアドプロシージャを作成するには、CREATE PROCEDUREを使用します ステートメントの後に、ストアドプロシージャを構成するコードが続きます。ストアドプロシージャがパラメータを受け入れる場合は、名前の後にパラメータを含める必要があります。

    CREATE PROCEDURE myStoredProcedure AS
    ...
    
    OR
    
    CREATE PROCEDURE myStoredProcedure @ParameterName DataType AS
    ...

    ストアドプロシージャを作成してから、そのストアドプロシージャを実行する例を次に示します。

    1. ストアドプロシージャを作成する

      このチュートリアル全体で作成した音楽データベースに対して次のステートメントを実行します。

      この例では、AlbumsFromArtistというストアドプロシージャを作成します。ストアドプロシージャの実行時に指定されたアーティストからすべてのアルバムを選択します。

      CREATE PROCEDURE spAlbumsFromArtist 
      	@ArtistName varchar(255)
      AS
      	SELECT AlbumName, ReleaseDate
      	FROM Albums
      		INNER JOIN Artists
      		ON Albums.ArtistId = Artists.ArtistId 
      	WHERE Artists.ArtistName = @ArtistName;
      GO
    2. ストアドプロシージャを表示する

      Programmability> Stored Proceduresを展開します 該当するデータベースの下のノードをクリックして、新しく作成されたストアドプロシージャを確認します。ストアドプロシージャのパラメータを展開することもできます ノードを実行するときに渡す必要のあるパラメーターを確認します。

    3. ストアドプロシージャを実行する

      ストアドプロシージャが作成されたので、EXECUTEを使用して実行できます。 ステートメントと必要なパラメータの受け渡し。

      この例では、アーティストの名前を渡す必要があります。

      EXECUTE spAlbumsFromArtist @ArtistName = "Devin Townsend";

      または、パラメーターを渡すときにパラメーター名を省略できます。このように:

      EXECUTE spAlbumsFromArtist "Devin Townsend";

    ストアドプロシージャを変更する

    ALTER PROCEDUREを使用してストアドプロシージャを変更できます 声明。ビューを変更する場合と同様に、新しいストアドプロシージャ定義を適用するだけで、ストアドプロシージャを変更できます。

    1. ストアドプロシージャを変更する

      次のステートメントを実行します。これにより、ストアドプロシージャによって返される結果に新しい列が追加されます。列名にもエイリアスを追加します。

      ALTER PROCEDURE spAlbumsFromArtist 
      	@ArtistName varchar(255)
      AS
      	SELECT 
              al.AlbumName, 
              al.ReleaseDate, 
              g.Genre
      	FROM Albums al
      		INNER JOIN Artists ar
      		ON al.ArtistId = ar.ArtistId 
      		INNER JOIN Genres g
      		ON g.GenreId = al.GenreId 
      	WHERE ar.ArtistName = @ArtistName;
      GO
    2. ストアドプロシージャを実行する

      Genreを追加しました 列をビューに追加すると、ストアドプロシージャは、実行時にその列を返すようになりました。

      EXECUTE spAlbumsFromArtist @ArtistName = "Devin Townsend";

    1. Excelを超えた5つの兆候

    2. SQLServerで日付と時刻を操作する際の問題のトラブルシューティング

    3. JSON_MODIFY()SQL Server(T-SQL)の例

    4. そのような列sqlite例外はありません