“TSQL的另一个字符串函数”问题。
SSRS 2008的ReportServer $ InstanceName数据库中的ExecutionLogStorage表将所有调用的参数放在一个列中 -
FullName = LastName,FirstName& CalledBy = Lastname,FirstName& DateSelected = MM / DD / YY& CheeseorFries = Fries
有些是空值,因此用户可能只有DateSelect或FullName,或CalledBy ......等。我需要能够解析'CalledBy = Lastname,FirstName'值;但在LOWER和LTRIM以及Lefts和Substrings以及Charindexes之间....我没有到达任何地方。
有什么想法吗? = /
目的是能够检索谁在哪个时间调用哪个报告的列表....
SSRS执行日志有一个用户名列,但是由于报告是从DNN门户调用的,使用链接服务器,管理员决定只使用域服务帐户就可以更容易地绕过整个网络委托事件 - 所以所有“用户名”字段由服务帐户而非个人填写。
谢谢你!答案 0 :(得分:1)
SELECT
RTrim(Substring(ex.Parameters, Charindex('&CalledBy=',ex.Parameters, 1) + 10, 1000))
as 'User',
ex.Format, ex.TimeStart, cat.Name as 'Report',
CONVERT(varchar(max), ex.TimeStart, 100) AS rundate
FROM ReportServer$MCSQL1.dbo.ExecutionLog AS ex, ReportServer$MCSQL1.dbo.Catalog AS cat
where ex.ReportID = cat.ItemID
不确定它是否适用于所有情况。基本上,从DNN网站运行的所有报告都是由执行帐户运行的,因此执行报告的“用户”字段是无用的。相反,我们创建了一个CalledBy参数&从DNN中提取报告的员工的个人资料中提供全名。
呃,同样,我认为我打破了某种程序设计规则,指望'CalledBy'将永远是字符串中的最后一个参数('1000').....但我们是记录它,所以未来的人可以跟随。rtrim(上面的子字符串...代码已经适当地提取了调用报告的个人的名字,因为几个月前参数已经到位。(报告右下角的隐藏字段)
希望这有帮助!