在Excel中调用带有2个参数(项目和版本)的sql存储过程:
DRIVER=SQL Server Native Client 11.0;SERVER=xxx;UID=;Trusted_Connection=Yes;APP=Microsoft Office;WSID=xxx;DATABASE=xxx;
EXECUTE [DW].[ExportProjectReport] ?,?;
存储过程是动态的,并以每个项目的列(月)为单位返回不同的时间范围:
SET @cols = STUFF((
SELECT DISTINCT ',' + QUOTENAME(LEFT([Date],7)) + ' FLOAT'
FROM [planning_table]
WHERE LEFT([Date],7) >= @mindate AND LEFT([Date],7) <= @maxdate
order by 1 FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'),1,1,'')
DECLARE @tempTable TABLE (
[Project Key] VARCHAR(50)
...
,' + @cols + '
); ...
问题:在xls中更改项目参数时,每个项目应返回不同的时间范围(以月为列),列的顺序错误。它保留从第一个查询(项目)开始的月份,并在最后添加新项目的前几个月。当多次更改项目参数时,甚至列(月)的名称也会出现错误:例如2017-55(而不是2017-12) 诸如禁用“保留列的布局”之类的选项无法解决此问题。 似乎已保存了第一次调用的返回结果,并且无法正确处理具有不同结果集(列)的其他调用。
如何解决此问题,还是必须采用存储过程来获取静态结果(总是具有相同的列数)。
答案 0 :(得分:0)
是的,如果它是一张表,我将在XLS中使用带有Power Pivot的SSAS多维数据集 但是,我有5个工作表,每个项目有原始数据(5个不同的存储过程调用),每个VBA应当将它们汇总到一份报告中,包括特殊布局和各种计算... 因此,我正在针对SQL中的所有5个源进行枢纽操作,以确保所有5个源的所有项目中的列数和行数都是相同的
BR wopro