6

我正在传递两个参数,即@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)

如果两个参数@key@AccountId都是NULL或其中之一,则该WHERE子句仍然有效并返回所有未显示的行。

于 2012-09-17T08:52:43.300 回答
0

检查参数是否为空或等价:

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