1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【データモデル】ストアドプロシジャーを仮想テーブルとして定義してみる

Last updated at Posted at 2023-05-31

今回は、ストアドプロシジャーを仮想テーブルとして使用する方法を試してみます。

このようなストアドプロシジャーを準備しました。

CREATE PROCEDURE QiitaSPTest   
    @DocumentDateStart date,   
    @DocumentDateEnd date   
AS
BEGIN
	SET NOCOUNT ON;
	
	DECLARE @dateFrom date;
	DECLARE @dateTo date;


	IF @DocumentDateStart = '' OR ISNULL(@DocumentDateStart,'')=''
		SET @dateFrom = '1900/01/01';
	ELSE
		SET @dateFrom = @DocumentDateStart;

	IF @DocumentDateEnd = '' OR ISNULL(@DocumentDateEnd,'')=''
		SET @dateTo = '2999/12/31';
	ELSE
		SET @dateTo = @DocumentDateEnd;

	SELECT 
		J1.CustomerName
		,J1.DocumentNumber
		,J1.DocumentDate
		,SUM(J0.Amount) as TotalAmount
	FROM [dbo].[SalesDetail] J0
	LEFT OUTER JOIN [dbo].[SalesHeader] J1 on J1.DocumentNumber = J0.DocumentNumber
	WHERE
		J1.DocumentDate BETWEEN @dateFrom and @dateTo
	GROUP By
		J1.CustomerName
		,J1.DocumentNumber
		,J1.DocumentDate
	ORDER BY
		J1.CustomerName
		,J1.DocumentNumber;
END	
GO

使用してみる。

DECLARE @Tmp TABLE (
	CustomerName NVARCHAR(200)
	,DocumentNumber int
	,DocumentDate date
	,TotalAmount int
)
INSERT INTO @Tmp (CustomerName, DocumentNumber, DocumentDate, TotalAmount)
EXEC QiitaSPTest '2023-04-01','2023-04-30'
SELECT * FROM @Tmp

ちゃんと動いた!
image.png
では、このストアドプロシジャーをSharperlightから使用できるようにしてみます。

仮想テーブル

目的のストアドプロシジャーを仮想テーブルとしてデータモデルに追加します。

データモデルの編集

Sharperlightアプリケーションメニューからスタジオを起動します。
目的のストアドプロシジャーが定義されているデータベースと接続するデータモデルを開きます。
開いたら、テーブルページに移動します。
image.png

仮想テーブルの追加

All Tablesフォルダを選択し、Schema -> Create Virtual Tableを選択します。
image.png
SQL Stored Procedureオプションを選びます。
中央のフィールドにストアドプロシジャーを実行するコードを記入します。
コード説明を入力します。
OKボタンで先に進みます。
image.png
OKボタンでVirtual Tableが追加されます。
image.png
追加された仮想テーブルをダブルクリックすることでフィールド詳細を中央の領域に表示できます。
出力用のフィールドが生成されたのと同時に、ストアドプロシジャーに渡すパラメータのテンプレートが6つ用意されます。
image.png

パラメータ

今回使用するストアドプロシジャーは、Date型のパラメータが2つだけ必要なので、Date型のテンプレート(Para5Para6)以外は削除します。
image.png
パラメータPara5Para6CodeDescriptionをそれぞれ以下のように変更します。
image.png

SQL Table Nameプロパティ

追加されたVirtual TableのSQL Table Nameプロパティを選択します。
ここにはストアドプロシジャー用のSharperlight独自のコードが自動生成されています。
そのコードを少し編集します。
右端の参照ボタンで生成されたコードをエディタに表示します。
image.png
このようなコードが生成されています。
image.png
今回使用するストアドプロシジャーではDate型のパラメータが2つのみ必要なので、6つのうちの1から4を削除します。
image.png
残ったDateTime型のパラメータ名を@p1@p2とそれぞれ変更します。
image.png
そのパラメータをストアドプロシジャーに渡すようにコードを変更します。
image.png
このようにします。
image.png
これで完成です。

/*MoveSQLBlockToTopBegin*/
/*These parameters can be used passed into the stored procedure below replacing any constants*/
declare @p1 datetime =##IF( {?Filter[1]./Param1.Operator}="All" ) '1901-01-01' ##ELSE '{?Filter[1]./Param1[1]}'##ENDIF
declare @p2 datetime =##IF( {?Filter[1]./Param2.Operator}="All" ) '2999-01-01' ##ELSE '{?Filter[1]./Param2[1]}'##ENDIF

declare @Temp_SP1 table (
    [CustomerName] nvarchar(max),
    [DocumentNumber] integer,
    [DocumentDate] datetime,
    [TotalAmount] integer
)
insert into @Temp_SP1 ([CustomerName],[DocumentNumber],[DocumentDate],[TotalAmount])
EXEC QiitaSPTest @p1, @p2
/*MoveSQLBlockToTopEnd*/

@Temp_SP1

OKボタンでSQL Table Nameプロパティの変更内容を保存します。

最後に追加/編集したVirtual TableをTable Displayフォルダに設定します。こうすることでクエリビルダから参照することができるようになります。
image.png
データモデルを保存します。

検証

早速、クエリビルダで追加した仮想テーブルの動作確認をしてみます。
クエリビルダを起動します。
フィルター領域では、製品に先ほど編集したデータモデル、テーブルには検索ダイアログから先ほど追加した仮想テーブルを指定します。
image.png
仮想テーブルを指定すると直ぐに、パラメータや選択可能なフィールド一覧が表示されます。
image.png
パラメータ1と2の値を入力し、全ての選択可能なフィールドを出力アイテムとして設定します。
image.png
プレビューボタンでクエリを実行してみます。
結果が戻ってきました。
image.png
このようなSQL文が生成されて実行されました。
image.png

この記事が何かのお役に立てれば幸いです。
では失礼します。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?