SSRSレポートに入力するための動的パラメータストアドプロシージャを作成しようとしています。私は多くのウェブサイトを閲覧した後、エンドユーザーがどのパラメータを使用するかをカスタム選択できるようにする方法を模索してきました。このプロセスでは、Endパラメータが1つの範囲で使用されていない場合、エンドユーザーはStartフィールドに入力された値のみに関心があるとみなされます。動的パラメータストアドプロシージャを書き込もうとしています
これまで私がこれまで持っていたことは次のとおりです。なぜ私はレポートを実行しようとするとSSRSをロックするのですか?
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[BrowseCODA]
AS
BEGIN
SET NOCOUNT ON;
DECLARE @DocList TABLE ([DocumentID] varchar(32))
DECLARE @GLAccountStart int = NULL
DECLARE @GLAccountEnd int = NULL
DECLARE @CustomerID int = NULL
DECLARE @VendorID int = NULL
DECLARE @StoreID nvarchar(2) = NULL
DECLARE @DocDateStart date = NULL
DECLARE @DocDateEnd date = NULL
DECLARE @InputDateStart date = NULL
DECLARE @InputDateEnd date = NULL
DECLARE @AcctPeriodStart int = NULL
DECLARE @AcctPeriodEnd int = NULL
DECLARE @AcctYearStart int = NULL
DECLARE @AcctYearEnd int = NULL
DECLARE @PaymentID int = NULL
DECLARE @ExtRef1 nvarchar(30) = NULL
DECLARE @ExtRef2 nvarchar(30) = NULL
DECLARE @ExtRef3 nvarchar(30) = NULL
DECLARE @ExtRef4 nvarchar(30) = NULL
DECLARE @ExtRef5 nvarchar(30) = NULL
DECLARE @ExtRef6 nvarchar(30) = NULL
INSERT INTO @DocList([DocumentID])
SELECT
company + '-' + FullDocNumber
FROM
[DataWarehouse].[dbo].[VDocDetails]
WHERE
([GLAccount] >= @GLAccountStart OR @GLAccountStart IS NULL)
AND ((@GLAccountEnd IS NULL AND @GLAccountStart IS NOT NULL
AND [GLAccount][email protected])
OR (@GLAccountEnd IS NOT NULL AND [GLAccount] <= @GLAccountEnd)
OR (@GLAccountEnd IS NULL))
AND ([CustomerNumber] = @CustomerID OR @CustomerID IS NULL)
AND ([Vendor] = @VendorID OR @VendorID IS NULL)
AND ([Store] LIKE @StoreID+'%' OR @StoreID IS NULL)
AND ([Doc_Date] >= @DocDateStart OR @DocDateStart IS NULL)
AND ((@DocDateEnd IS NULL AND @DocDateStart IS NOT NULL
AND [Doc_Date] = @DocDateStart)
OR (@DocDateEnd IS NOT NULL AND [Doc_Date] <= @DocDateEnd)
OR (@DocDateEnd IS NULL))
AND ([Input_Date] >= @InputDateStart OR @InputDateStart IS NULL)
AND ((@InputDateEnd IS NULL AND @InputDateStart IS NOT NULL
AND [Input_Date] = @InputDateStart)
OR (@InputDateEnd IS NOT NULL AND [Input_Date] <= @InputDateEnd)
OR (@InputDateEnd IS NULL))
AND ([period] >= @AcctPeriodStart OR @AcctPeriodStart IS NULL)
AND ((@AcctPeriodEnd IS NULL AND @AcctPeriodStart IS NOT NULL
AND [period] = @AcctPeriodStart)
OR (@AcctPeriodEnd IS NOT NULL AND [period] <= @AcctPeriodEnd)
OR (@AcctPeriodEnd IS NULL))
AND ([Year] >= @AcctYearStart OR @AcctYearStart IS NULL)
AND ((@AcctYearEnd IS NULL AND @AcctYearStart IS NOT NULL
AND [Year] = @AcctYearStart)
OR (@AcctYearEnd IS NOT NULL AND [Year] <= @AcctYearEnd)
OR (@AcctYearEnd IS NULL))
AND ([PaymentID] = @PaymentID OR @PaymentID IS NULL)
AND ([Reference1] LIKE @ExtRef1+'%' OR @ExtRef1 IS NULL)
AND ([Reference2] LIKE @ExtRef2+'%' OR @ExtRef2 IS NULL)
AND ([Reference3] LIKE @ExtRef3+'%' OR @ExtRef3 IS NULL)
AND ([Reference4] LIKE @ExtRef4+'%' OR @ExtRef4 IS NULL)
AND ([Reference5] LIKE @ExtRef5+'%' OR @ExtRef5 IS NULL)
AND ([Reference6] LIKE @ExtRef6+'%' OR @ExtRef6 IS NULL)
SELECT
*
FROM
[DataWarehouse].[dbo].[VDocDetails]
WHERE
company + '-' + FullDocNumber IN (SELECT DocumentID FROM @DocList)
END
GO
ロックされているが、ストアドプロシージャのパラメータが、通常、CREATE/ALTERとAS BEGINの間に、DECLAREなしのカンマ区切りリストとして表示されます。 – SMM
このストアドプロシージャはどのように使用されますか?つまり、変数の値をどのように設定しますか?プロシージャ・レベルで宣言されていないので、すべての変数をNULLとして扱います。 –