【发布时间】:2020-07-19 17:17:18
【问题描述】:
我需要在一个 Excel 文件下的不同工作表中提供我的分析结果。目前我正在手动将结果复制并粘贴到excel(10张)中。我如何使用存储过程来自动执行此操作?
我尝试过类似下面的方法。
insert into OPENROWSET(
'Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=D:\Results\test.xls;;HDR=YES',
'SELECT * FROM [Sheet1$]')
select * from MY_TABLE WHERE ATTR='YES'
insert into OPENROWSET(
'Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=D:\Results\test.xls;;HDR=YES',
'SELECT * FROM [Sheet2$]')
select * from MY_TABLE WHERE ATTR='No'
它给了我错误
SQL Server 阻止访问组件“即席分布式查询”的语句“OpenRowset/OpenDatasource”
我会尝试从管理员那里获得访问权限。希望之后它会起作用吗? 但是有没有其他方法可以做到这一点?我还想知道如何在一个过程中执行此操作,以便在不同的工作表中提供结果。
【问题讨论】:
-
考虑一个连接到您的数据库并将查询结果读入工作表的客户端编码解决方案。请参阅 ADO for Excel VBA。
-
在excel文件中,选择Data from SQL Server选项,那么你的查询就必须是这样的(这是我之前用过的),但是列名等需要完全匹配你的 SP 吐出什么:
select * from openrowset ( 'sqlncli' , 'Server=localhost;Trusted_Connection=yes;' , 'exec [yourcompanyname].dbo.kv_sp_getWhseQtys_AW ''2019-08-12'' with result sets ( ( ItemCode varchar(50) , ItemDescription varchar(200) , ItemGroup varchar(50) , AvgUnitCost float , LatestUCst float ) )' ) -
向我提供存储过程结果的列名及其数据类型,然后我将为您的问题提供正确答案@Avinash...
-
我可以通过在
SSIS包中创建Sequence Container来解决这个问题。感谢大家的投入
标签: sql sql-server excel sql-server-2012 openrowset