3

2 つのデータセットを作成しました。

Dataset1 (ストアド プロシージャから):

CREATE PROCEDURE [dbo].[usp_GetPerson](
@Category varchar(20))
AS

BEGIN
SELECT  FirstName, LastName, Category                   
FROM    tblPerson 
WHERE   (Category IN (@Category))

END

データセット 2:

SELECT DISTINCT Category
FROM   tblPerson

SSRS では、パラメーターを編集して複数の値を許可し、Dataset2 から使用可能な値を取得しました。

Dataset1 のみに基づいてフィルタリングを試みましたが、反復的なすべての入力を受け取ります (これが、データセット 2 の使用を選択した理由です)。

ストアド プロシージャを使用すると、複数の値を選択できないようです。単一の値しか選択できません。それ以外の場合、レポートは空白になります。

そのため、Dataset1 を再作成しましたが、ストアド プロシージャは使用しませんでした。代わりに、テキスト エディターで SQL ステートメントを記述しただけで、複数の値を問題なく選択できます。

なぜこれが起こるのか知っていて、これを修正するのを手伝ってくれる人はいますか?

注: SQL ステートメントがより複雑になり、複数のデータベースに参加する場合に備えて、ストアド プロシージャを使用しています。SSRS でこれを実行しようとしましたが、ストアド プロシージャを使用するとはるかに高速でした。

ありがとうございました!

4

3 に答える 3

0

-- インターネット上のどこかでこの関数を見つけました-場所を思い出せません

CREATE FUNCTION [dbo].[SplitString] ( @stringToSplit VARCHAR(MAX) )
RETURNS
 @returnList TABLE ([Name] [nvarchar] (500))
AS
BEGIN

DECLARE @name NVARCHAR(255)
DECLARE @pos INT

 WHILE CHARINDEX(',', @stringToSplit) > 0
 BEGIN
  SELECT @pos  = CHARINDEX(',', @stringToSplit)  
  SELECT @name = SUBSTRING(@stringToSplit, 1, @pos-1)

  INSERT INTO @returnList 
  SELECT @name

  SELECT @stringToSplit = SUBSTRING(@stringToSplit, @pos+1, LEN(@stringToSplit)-@pos)
 END

 INSERT INTO @returnList
 SELECT @stringToSplit

 RETURN
END

-- レポートからの SP 入力
パラメーター @CarIds varchar(100) CREATE Table #CarsTable(CarID varCHAR(10))

INSERT #CarsTable
SELECT LTRIM(Name) FROM dbo.SplitString(@carIds) 

次に、クエリについては...

WHErE CarsOwned IN  (SELECT CarId  FROM #CarsTable)
于 2013-09-18T16:53:44.963 に答える