Tsql 如何使用用户!用于限制报表服务器上的数据的用户ID
我有一个“用户”表,它将每个用户映射到允许他们查看的数据 未来的几份报告将使用此用户表,我想继续使用最佳方法,利用全局变量User!用户ID 我设置的探索报告使用了一个带有参数@myUser的存储过程——在存储过程中,数据与用户表进行内部联接,在WHERE子句中,我使用@myUser限制数据,如下所示:Tsql 如何使用用户!用于限制报表服务器上的数据的用户ID,tsql,ssrs-2008,reporting-services,Tsql,Ssrs 2008,Reporting Services,我有一个“用户”表,它将每个用户映射到允许他们查看的数据 未来的几份报告将使用此用户表,我想继续使用最佳方法,利用全局变量User!用户ID 我设置的探索报告使用了一个带有参数@myUser的存储过程——在存储过程中,数据与用户表进行内部联接,在WHERE子句中,我使用@myUser限制数据,如下所示: CREATE PROCEDURE [dbo].[pr_SSRS_Dly_Data] @myUser VARCHAR(50) AS SELECT
CREATE PROCEDURE [dbo].[pr_SSRS_Dly_Data]
@myUser VARCHAR(50)
AS
SELECT
x.[Date]
, x.Product
, x.Amount
FROM
WHReports.dbo.tb_Dly_Data x
INNER JOIN WHReports.dbo.tb_Users y
ON
x.CustomerKey = y.CustomerKey
WHERE 1 = CASE WHEN (@myUser = y.LoginName) THEN 1 ELSE 0 END
在报告中,我使用此存储过程作为数据集,然后创建@myUser参数-在@myUser参数的默认值部分,我使用表达式User!用户ID。我还隐藏了这个参数
这是最好的方法吗?您的方法是正确的,我只有两个小改动:
CREATE PROCEDURE [dbo].[pr_SSRS_Dly_Data]
@myUser VARCHAR(50)
AS
SELECT
x.[Date]
, x.Product
, x.Amount
FROM
WHReports.dbo.tb_Dly_Data x
INNER JOIN WHReports.dbo.tb_Users y
ON y.CustomerKey = x.CustomerKey
WHERE @myUser = y.LoginName
您的方法是正确的,我只有两个小改动:
CREATE PROCEDURE [dbo].[pr_SSRS_Dly_Data]
@myUser VARCHAR(50)
AS
SELECT
x.[Date]
, x.Product
, x.Amount
FROM
WHReports.dbo.tb_Dly_Data x
INNER JOIN WHReports.dbo.tb_Users y
ON y.CustomerKey = x.CustomerKey
WHERE @myUser = y.LoginName
看起来连接中也有错误-认为可能是笛卡尔坐标;我将修改其中一个别名,我在其他查询中使用了“WHERE 1=CASE WHEN…”结构,但在上面的查询中并不需要太多。如果我想使参数为NULL,那么使用CASE可能非常简单,即将以下内容添加到我的原始查询“WHEN NULL THEN 1”中。此外,为了安全起见,您应该在主数据查询中重新检查参数,而不仅仅是在提供参数的查询中。(用户可以使用URL访问来提供任何有效的参数,不管他们的ID是什么。)看起来连接中也有错误——认为可能是笛卡尔的;我将修改其中一个别名,我在其他查询中使用了“WHERE 1=CASE WHEN…”结构,但在上面的查询中并不需要太多。如果我想使参数为NULL,那么使用CASE可能非常简单,即将以下内容添加到我的原始查询“WHEN NULL THEN 1”中。此外,为了安全起见,您应该在主数据查询中重新检查参数,而不仅仅是在提供参数的查询中。(用户可以使用URL访问提供任何有效参数,而不管其ID如何。)