TSQL基于当前用户

TSQL基于当前用户

问题描述:

部门的鲜明名单我连想怎么短语的正确此为标题。TSQL基于当前用户

我有一个名为Departmentmulti-valued parameter的SSRS报告。

如果用户Department A ......我们想默认为所有部门EXCEPT A部门

如果用户IS NOT INDepartment A ......我们希望仅默认他们的部门

部门A将永远不会在参数列表中,但作为部门A的成员会影响您将看到的内容。

我知道我可以用ALL参数选项解决这个问题,但我宁愿唯一的参数值是有效的部门名称

我的参数填入两个数据集。 第一个数据集有有效的部门三个选项:EURREMLIFA

第二个数据集仅确定当前用户的部门,并会填充默认值。 IF当前用户的部门CS我们要选择的其他三个部门作为默认值。如果他们的部门<> CS我们希望仅默认他们的部门。

我想下面的代码的工作,但在连接字符串是不是在第一个数据集的选项,因此它不能是默认选项

SELECT DISTINCT 
    CASE 
     WHEN EmployeePracticeArea = 'CS' 
      THEN 'EUR, LIFA, REM' 
     ELSE EmployeePracticeArea 
    END AS 'EmployeePracticeArea' 
FROM DimEmployee 
WHERE 
    (EmployeePracticeArea <> '') 
    AND (UserLogin = @CurrentUser) 

与case语句的问题是,它会尝试设置默认值EUR, LIFA, REM。该字符串不存在于“选项”值列表中。选项有三个独立的串EURLIFAREM。所以我需要评估当前用户的部门,然后没有它返回一个列表

Case语句不能返回多个值

这里有一些东西,会产生数据集为你

IF OBJECT_ID('tempdb..#TestData') IS NOT NULL 
    DROP TABLE #TestData; 


WITH Data (EmployeePracticeArea) AS (
    SELECT 'LIFA' 
    UNION 
    SELECT 'REM' 
    UNION 
    SELECT 'EUR' 
    UNION 
    SELECT 'CS' 
) 

SELECT * INTO #TestData FROM Data ; 

最后的结果是这样的: 用户1在LIFA部门自己的参数默认为刚刚LIFA 用户2在CS部门自己的参数默认为欧元,LIFA ,REM

+0

'CASE'表达式似乎写得很对 - 我不认为我在理解你在做什么...你能展示样本数据和期望的结果吗? – Siyual

DECLARE @t TABLE(Dept varchar(4)) 
DECLARE @CurrentUserDept varchar(4) = (SELECT EmployeePracticeArea FROM dimEmployee WHERE UserLogin = @CurrentUser) 

IF @CurrentUserDept = 'CS' 
    BEGIN 
     INSERT INTO @t VALUES ('EUR'), ('LIFA'), ('REM') 
    END 
ELSE 
    BEGIN 
     INSERT INTO @t SELECT @CurrentUserDept 
    END 
SELECT * FROM @t 
+0

太棒了,非常感谢。我从不在我的TSQL中使用'IF'语句,但我必须开始 – gruff

+0

很高兴我可以提供帮助。我仍然在这方面学到很多东西,我已经从事这项工作数十年了! :) –