我正在处理通过SSRS显示来自两个表的选定测试结果的请求。我已经开发了动态SQL来实现这一点但在运行存储过程时遇到困难,因为我只收到第一个结果集。
此存储过程首先查询标记名称表,该表用于为第二个查询构建列...这将检索实际所需的数据。 SP返回列名但不返回所需的第二个结果集。
我意识到这是一个丑陋的解决方案,但是我们的IT小组没有对原始数据库设计的投入,所以现在我们正在尽力帮助。
代码:
DECLARE @cols as NVARCHAR(MAX), @query1 as NVARCHAR(MAX), @query2 as NVARCHAR(MAX),
@FLOATTABLE NVARCHAR(MAX), @TAGTABLE NVARCHAR(MAX),@startdate as NVARCHAR(MAX),
@ENDDATE AS NVARCHAR(MAX), @results as NVARCHAR(MAX)
set @FLOATTABLE = 'dbo.TRW_TESTER_FLOATTABLE' --for testing purposes only
set @tagtable = 'dbo.TRW_TESTER_TAGTABLE' --for testing purposes only
Set @startdate='2013-12-05' -- for testing purposes only
Set @enddate='2013-12-31' -- for tesying purposes only
set @query2 = 'SELECT STUFF((SELECT DISTINCT '','' +
QUOTENAME(CONVERT(VARCHAR,TagName),'
+ '''"'') FROM ' + @TAGTABLE + ' FOR XML PATH ('''')),1,1,'''')'
EXECUTE sp_executeSQL @query2, @Cols OUTPUT
Set @query1 = 'SELECT DISTINCT DateAndTime, Millitm, ' + @cols + ' FROM ( select
T.DateAndTime, T.Millitm, N.TagName, T.Val from ' + @FLOATTABLE + ' T LEFT JOIN ' +
@TAGTABLE + ' N ON T.TagIndex=N.TagIndex WHERE T.DateAndTime Between '''+ @startdate +
''' AND '''+ @enddate +''') x PIVOT (MAX(Val) for TagName IN (' + @cols + ')) p'
EXECUTE sp_executeSQL @query1, @results OUTPUT