我有以下代码
DECLARE @SQL NVARCHAR(max), @SourceFile nvarchar(500);
set @SourceFile = N'\\XXXX\C$\Spreadsheet.xls';
SELECT @SQL = N'SELECT * FROM OPENROWSET (''Microsoft.ACE.OLEDB.12.0'', ''Excel 8.0;Database='+@SourceFile+''', ''SELECT * FROM [Filer_IDs$]'' )
WHERE [Column1] = ''TRUE'' OR [Column2] = ''TRUE'''
EXEC (@SQL)
--------------------------
set @SourceFile = N'\\XXXX\C$\Spread''sheet.xls';
SELECT @SQL = N'SELECT * FROM OPENROWSET (''Microsoft.ACE.OLEDB.12.0'', ''Excel 8.0;Database=@SourceFile'', ''SELECT * FROM [Sheet1$]'' )
WHERE [Column1] = ''TRUE'' OR [Column2] = ''TRUE'''
EXEC sp_executesql @SQL, N'@SourceFile nvarchar(500)', @SourceFile
第一个代码片段工作正常,但如果电子表格中有一些转义字符如“'
”,则名称失败(SQL注入)。我想使用sp_executesql
,但我收到以下错误:
OLE DB提供程序“Microsoft.ACE.OLEDB.12.0”用于链接服务器“(null)”返回消息“Microsoft Access数据库引擎无法找到对象'Sheet1 $'。确保对象存在且您正确拼写其名称和路径名称。如果'Sheet1 $'不是本地对象,请检查您的网络连接或联系服务器管理员。“ Msg 7350,Level 16,State 2,Line 1 无法从OLE DB提供程序“Microsoft.ACE.OLEDB.12.0”获取链接服务器“(null)”的列信息。
请帮忙。