我正在处理为任何SSRS RDL标识依赖的db对象的特定问题。
我对RDL中的查询是否有任何数据集具有存储过程有很好的了解,然后可以引用关联的存储过程并获取所有依赖对象(详细信息可以在此处找到:查找SQL Server对象依赖关系的不同方法)
但是我正在专门针对文本查询或任何rdl的内联查询的数据集。我能够从rdl的XML中提取CommandText,但是我不确定如何提取db对象(例如sp,table,views列)形成一个命令文本,该文本是rdl中的内联查询。
例如,如果我从XML commandText中提取以下查询(这是一个假设查询,则数据库中的名称未标准化,例如vw_用于视图,udf_用于函数):
-----This query serves Report ABC
SELECT DATE
,[amount]
,teamID = (SELECT TeamID FROM Sales.[getSalesPerson](r.date) as s WHERE R.[SalesPersonName] = S.[SalesPersonName])
,[channel]
,[product]
,[Item]
,r.[M_ID]
,Amount
,M.[Type]
FROM dbo.FactTable AS R
LEFT JOIN sp_Channel C ON R.[Channel_ID] = C.[Channel_ID]
LEFT JOIN Marketing.vw_M M ON R.[M_ID] = M.[M_ID]
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以确定此查询具有依赖对象,如下所示:
ObjectName ObjectType
------------------------------------------
dbo.FactTable Table
sp_Channel Stored Procedure
Marketing.vw_M View
Sales.[getSalesPerson] Function
Run Code Online (Sandbox Code Playgroud) 示例数据集:
ID seat code
15098 1 AA21
15098 2 AA21
15105 1 AA21
15105 1 DD15
15105 1 NN60
15196 1 AA21
15196 2 DD50
15196 2 DD51
15209 1 AA21
15209 3 AA21
15209 2 CC50
15209 1 DD01
15209 3 DD01
15210 1 AA21
15210 2 AA21
15210 3 AA21
15210 1 DD21
15210 2 DD21
15210 3 DD21
15211 1 CC51
15211 1 DD20
15212 1 AA21
15212 1 DD03
Run Code Online (Sandbox Code Playgroud)
和所需的结果是:
ID seat Codes
15098 1 AA21 …Run Code Online (Sandbox Code Playgroud) 我试图为我在下面定义的CurrentClient变量设置一个值,然后用它来计算它在一个范围内出现的次数.我不知道我在这里做错了什么.它给出了错误:"运行时错误9下标超出范围"的步骤,它将Sheet 2单元格A2中的值赋给Currentclient.
请帮忙.
Sub GetValue()
Dim ClientCnt As Integer
Dim CurrentClient As String
CurrentClient = Sheets("Sheet 2").Range("A2").Text
ClientCnt = Application.WorksheetFunction.CountIf(Range("A:A"), CurrentClient)
End Sub
Run Code Online (Sandbox Code Playgroud)