Sql server 在需要条件的上下文中指定的非布尔类型的表达式

Sql server 在需要条件的上下文中指定的非布尔类型的表达式,sql-server,reporting-services,Sql Server,Reporting Services,我有一个SSRS报告,它试图将名称列表传递给参数,默认设置为“all” 将参数的“默认值”设置为使用与“可用值”相同的查询,因为名称列表很长,因此“可用值”将不起作用。(如果我有一个小的列表,它会自动选中“全选”) 我知道错误来自于@Manager='All'或n2.NAME IN(@Manager),但我不知道任何其他方法可以使它工作。因为@Manager是一个函数,您需要在条件中使用而不是=/code>。尝试将WHERE子句的该部分更新为: SELECT 'PERSONFULLNAME'

我有一个SSRS报告,它试图将名称列表传递给参数,默认设置为“all”

将参数的“默认值”设置为使用与“可用值”相同的查询,因为名称列表很长,因此“可用值”将不起作用。(如果我有一个小的列表,它会自动选中“全选”)


我知道错误来自于
@Manager='All'或n2.NAME IN(@Manager)
,但我不知道任何其他方法可以使它工作。

因为
@Manager
是一个函数,您需要在条件中使用
而不是
=/code>。尝试将WHERE子句的该部分更新为:

 SELECT
'PERSONFULLNAME' = LASTNM --+ ', '+ FIRSTNM +' ' + COALESCE(MIDDLEINITIALNM, '')
,PERSONNUM
,EMPLOYMENTSTATUS
,HOMELABORLEVELNAME5
,ISWFCTKEMPLICENCE
,ISWFCSSELICENCE
,ISWFCMGRLICENCE
,ISWFCSCHEDULERLIC
,USERACCOUNTNM
,USERACCOUNTSTATUS
,'HCM_Cost_Center_Manager_Name' = n2.NAME
,TIMEENTRYMETHODNM
FROM dbo.VP_PERSON p
LEFT OUTER JOIN PSHCMirror.dbo.PS_JPM_PROFILE jp
  ON SUBSTRING(jp.JPM_PROFILE_ID,7,6) = SUBSTRING(p.HOMELABORLEVELNAME5,1,6)
AND jp.JPM_JP_TYPE = 'BU_DEPT'
LEFT OUTER JOIN PSHCMirror.dbo.PS_JPM_JP_ITEMS jpi
  ON jpi.JPM_PROFILE_ID = jp.JPM_PROFILE_ID
AND jpi.JPM_CAT_TYPE = 'HRIS_CNTCT2'
LEFT OUTER JOIN 
(
SELECT n1.EMPLID, n1.NAME, 'row_nbr' = ROW_NUMBER() OVER (PARTITION BY n1.EMPLID ORDER BY n1.EFFDT DESC, n1.NAME_TYPE DESC)
FROM PSHCMirror.dbo.PS_NAMES n1
) n2
ON n2.EMPLID = jpi.JPM_PERSON_ID_1
AND n2.row_nbr = 1

WHERE USERACCOUNTSTATUS = 'Active'
AND EMPLOYMENTSTATUS = 'Active'
AND (
@Manager = 'All' OR n2.NAME IN (@Manager)
)
order by 1

如果要将参数传递到查询中,则必须使用连接函数将值集合转换为字符串。然后,您可以使用自定义拆分函数或类似的运算符来检查WHERE子句中的值

另一个选项是添加数据集过滤器。对于表达式,您可以选择
名称
列。使用“In”作为运算符。对于值,请使用如下表达式:

WHERE ('All' IN (@Manager) OR n2.NAME IN (@Manager))

这会将所选名称的集合转换为一个可以检查的数组。

我在SSIS的“执行SQL任务”组件中遇到了相同的错误。在我的情况下,我没有意识到我超过了大约32k的SQL脚本字符。在这种情况下,请使用“浏览”按钮加载SQL代码或使用“脚本”组件“相反。

因为
@Manager
是一个多值参数,所以您需要在
中使用
,而不是=。试试(@Manager)中的'All'或n2.NAME(@Manager)
这个查询是直接在您的数据集中进行的,还是在您调用数据集的存储过程中进行的?@stubaker您应该将其作为您今天的回答发布。非常感谢。
=Split(Join(Parameters!Manager.Value, ","), ",")