SSRS报告呈现不喜欢Suser_name()

时间:2012-12-04 23:28:25

标签: reporting-services parameters visual-studio-2005 username

我使用VS 2005在SSRS中运行一个报告,该报告调用名为proc_parms_amort_modes的SQL Server存储过程。最近我需要更改存储过程以不同方式提取数据,因为我们现在需要以用户特定的方式显示它。

旧的存储过程如下所示,非常简单,并且在SQL Server Mgmt Studio,VS 2005报表预览模式,VS2005调试模式和我编译的应用程序中运行时正确处理。

select amort_mode_key, amort_mode_description 
from tbl_amort_mode 
where amort_mode_key <> 2 
order by amort_mode_seq

新查询如下所示,在SQL Server Mgmt Studio,VS 2005报表预览模式下运行时正确处理,但在VS2005调试模式和我编译的应用程序中运行时出错。

select a.amort_mode_key, a.amort_mode_description 
from tbl_amort_mode a
inner join tbl_amort_mode_user mu on a.amort_mode_key = mu.amort_mode_key
inner join tbl_amort_user u on mu.amort_user_key = u.amort_user_key
where u.windows_identity = suser_sname() 
order by 1

我得到的错误是“为报告参数提供的默认值或值'parmAmortModeKey'不是有效值。(rsInvalidReportParameter)”。注意:此查询是parmAmortModeKey参数的源,该参数在后续步骤中的另一个数据集中使用。

现在这是我不明白的地方。如果我拿出这条线:

where u.windows_identity = suser_sname() 

并替换为:

where u.windows_identity = 'aceina\r4war2'

然后它工作正常,但当然它是硬编码给单个用户(我)。 SUSER_NAME()给了我相同的值('aceina \ r4war2'),所以我真的很困惑。是否有某些原因SSRS不喜欢“SUSER_NAME()”语法?我已经尝试过SUSER_SNAME()但是我得到了同样的错误。我看起来太过分了吗?

我知道我可以使用User!UserId语法进入并在VS2005中创建一个参数,然后将其传递给上面的存储过程,但我需要将此User!UserID参数添加到很多报告中我几乎在每个报告中调用存储过程,如果可能的话,更愿意修复这个存储过程。

非常感谢任何想法。

0 个答案:

没有答案