我有一个报告的要求,其中作为选择参数/过滤器的一部分,用户还选择要上传的Excel文件。然后将Excel中的数据用作查询的一部分。我的问题是,这是可能的,你如何设置选择参数来选择文件?提前感谢。我搜索和调查了各种选择,但没有找到解决方案
bxpogfeg1#
**提示:**这个答案有很多事情,你应该避免安全,这样做在你自己的风险!
要获取文件列表,您可以使用xp_xmlshell执行命令,您需要在服务器上允许此操作,因为默认情况下它是关闭的。除此之外,您可以执行像这样简单的操作。
DECLARE @filespec varchar(1000) = '\\myServer\MyFolder\UploadsToSQL\MyFiles\*.xlsx' DECLARE @cmd varchar(1000) = 'dir ' + @filespec + ' /b' exec xp_cmdshell @cmd
字符串如果你使用它作为数据集查询,它将返回一个匹配文件的列表,你可以使用它来填充你的参数下拉列表。选择其中一个文件后,假设参数名为@file,则可以执行以下操作来读取数据注意:我已经设置了一个登录(AceDriverLogin)与所有所需的访问,以便这一工作。
@file
DECLARE @file varchar(1000) = '\\myServer\MyFolder\UploadsToSQL\MyFiles\MyTestFile.xlsx' DECLARE @XLSelect varchar(2000) SET @XLSelect = 'SELECT * FROM OPENROWSET(''Microsoft.ACE.OLEDB.12.0'',''Excel 12.0;Database=' + @file + ';HDR=YES'',''SELECT * FROM [Sheet1$]'') ' exec (@XLSelect) as login = 'AceDriverLogin'
型这将返回“Sheet 1”的内容如果你需要对结果做更多的工作,那么你需要创建一个临时表来插入数据,然后你可以对临时表做你喜欢的事情。这样的事情
DECLARE @file varchar(1000) = '\\myServer\MyFolder\UploadsToSQL\MyFiles\MyTestFile.xlsx' CREATE TABLE #xlData ([FirstColumn] varchar(100), [SecondColumn] varchar(100), [ThirdColumn] varchar(100)) DECLARE @XLSelect varchar(2000) SET @XLSelect = 'INSERT INTO #xlData ([FirstColumn], [SecondColumn], [ThirdColumn]) ' + 'SELECT [FirstColumn], [SecondColumn], [ThirdColumn] FROM OPENROWSET(''Microsoft.ACE.OLEDB.12.0'',''Excel 12.0;Database=' + @file + ';HDR=YES'',''SELECT * FROM [Sheet1$]'') ' exec (@XLSelect) as login = 'AceDriverLogin' SELECT * FROM #xlData
型
1条答案
按热度按时间bxpogfeg1#
**提示:**这个答案有很多事情,你应该避免安全,这样做在你自己的风险!
要获取文件列表,您可以使用xp_xmlshell执行命令,您需要在服务器上允许此操作,因为默认情况下它是关闭的。除此之外,您可以执行像这样简单的操作。
字符串
如果你使用它作为数据集查询,它将返回一个匹配文件的列表,你可以使用它来填充你的参数下拉列表。
选择其中一个文件后,假设参数名为
@file
,则可以执行以下操作来读取数据注意:我已经设置了一个登录(AceDriverLogin)与所有所需的访问,以便这一工作。
型
这将返回“Sheet 1”的内容
如果你需要对结果做更多的工作,那么你需要创建一个临时表来插入数据,然后你可以对临时表做你喜欢的事情。
这样的事情
型