【发布时间】:2017-03-02 21:02:20
【问题描述】:
我有带有参数@IsMatch 的SP,它检查是否
ChildPolicyNumberRater <> ChildPolicyNumberIMS
还有参数@ChildPolicyNumber,允许用户使用通配符参数。
如果我在 SSMS 中使用参数 'No Match' 运行 SP,它会为我提供正确的数据 ChildPolicyNumberRater NULLS 以及与 ChildPolicyNumberIMS 不匹配的数据:
但是如果我在 SSRS 中运行它,它只会显示ChildPolicyNumber NULLS 的记录。
我确信我的 WHERE 子句中的某些内容使 SSRS 显示数据与 SSMS 不同。但我不明白为什么!
ALTER PROCEDURE MyProcedure
@DateFrom datetime = '2017-01-30'
@DateTo datetime = '2017-03-05'
@lineGuid varchar(8000) = NULL,
@IsMatch varchar(50),
@ChildPolicyNumber varchar(50)
AS
DECLARE @TempData
INSERT INTO @TempData
SELECT ...
FROM...
WHERE
SELECT
ChildPolicyNumberIMS
,ChildPolicyNumberRater
,case when ChildPolicyNumberRater <> ChildPolicyNumberIMS or ChildPolicyNumberRater is null then 1 else 0 end as status
,MAX([InvoiceDate]) as InvoiceDate
,[CompanyGUID]
WHERE
(
ChildPolicyNumberRater like '%'+ @ChildPolicyNumber +'%'
or ChildPolicyNumberRater is null
or @ChildPolicyNumber is null
)
and (
(@IsMatch = 'No Match'
and ChildPolicyNumberRater<>ChildPolicyNumberIMS or ChildPolicyNumberRater is null)
or(@IsMatch = 'Match' and ChildPolicyNumberRater=ChildPolicyNumberIMS)
)
【问题讨论】:
-
(@IsMatch = 'No Match' and ChildPolicyNumberRater<>ChildPolicyNumberIMS or ChildPolicyNumberRater is null)看起来像是and和or的奇怪组合。( ( @IsMatch = 'No Match' and ChildPolicyNumberRater<>ChildPolicyNumberIMS ) or ChildPolicyNumberRater is null)是你想要的吗?这就是由于运算符优先级而得到的结果。 -
哦!!!我很困惑。我想要如果它是
match,那么只匹配没有nulls的记录,但是如果no match- 然后返回nulls并且也没有匹配的记录(在ChildPolicyNumberRater列中) -
我认为你只需要 - (@ChildPolicyNumber IS NULL OR ChildPolicyNumberRater LIKE '%'+@ChildPolicyNumber+'%')
-
那
MatchNo Match参数呢? -
在 SSRS 屏幕截图中,下拉菜单显示“不匹配”而不是“不匹配”。您确定要发送 No Match 吗?
标签: sql-server tsql reporting-services parameters