EXCEL调用sql server存储过程=>列问题

时间:2019-02-11 10:27:26

标签: sql-server excel

在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) 诸如禁用“保留列的布局”之类的选项无法解决此问题。 似乎已保存了第一次调用的返回结果,并且无法正确处理具有不同结果集(列)的其他调用。

如何解决此问题,还是必须采用存储过程来获取静态结果(总是具有相同的列数)。

1 个答案:

答案 0 :(得分:0)

是的,如果它是一张表,我将在XLS中使用带有Power Pivot的SSAS多维数据集 但是,我有5个工作表,每个项目有原始数据(5个不同的存储过程调用),每个VBA应当将它们汇总到一份报告中,包括特殊布局和各种计算... 因此,我正在针对SQL中的所有5个源进行枢纽操作,以确保所有5个源的所有项目中的列数和行数都是相同的

BR wopro