6

と の 2 つのパラメータを渡してい@AccountIdます@key。パラメータに値がない場合、データベース@AccountIdに存在するすべての値を表示したいと思います。同じデータセットに対してこれを行いたい。これは可能ですか、それとも別のデータセットを作成しましたか?@key@AccountId@key

私が使用しているクエリは次のとおりです。

CREATE PROCEDURE [dbo].[GetDenyList]
@AccountId nvarchar(100),
@key nvarchar(400)
AS
select New_AccountId AS 'AccountId/Key', New_Description AS 'Reason',CreatedOn AS 'Date'
  from abc.dbo.New_keydenylist 
 where New_AccountId is not null
   AND @AccountId = New_AccountId
 union all
select new_key AS 'AccountId/Key', New_Description AS 'Reason',CreatedOn AS 'Date' 
  from abc.dbo.New_keydenylist 
 where New_key is not null
   and @Key=New_key
4

2 に答える 2

0

あなたの質問をよく理解している場合は、WHERE句に渡されるパラメーターの値に関係なく、常に true と評価される述語を使用する必要があります。例WHERE 1 = 1:

 WHERE 1 = 1
 AND (@AccountId IS NOT NULL OR AccountId = @AccountId)

@keyパラメータと同じ:

 WHERE 1 = 1
 AND (@key IS NOT NULL OR New_key = @key)

2 つのパラメーター@key@AccountIdが両方NULLまたはいずれかである場合、WHERE句は引き続き有効であり、提示されていないすべての行を返します。

于 2012-09-17T08:52:43.300 に答える
0

パラメータの null または等価性を確認します。

AND ((@AccountId IS NULL) OR (@AccountId = New_AccountId))
于 2012-09-17T08:53:42.897 に答える