【发布时间】:2016-09-03 14:44:03
【问题描述】:
我正在尝试使用将文件目录中的动态 SQL 解析为 OpenRowSet(@Database)。现在我有一个用于 Excel 文件的硬编码目录。最终结果将是我创建一个应用程序,它将获取用户的文件并导入到 SQL 表中。从那里我将合并和匹配/不匹配(工作正常)。这是拼图的最后一块。我不知道为什么错误消息在“C:\WINDOWS\system32\”中寻找我的文件
我目前的错误信息是:
链接服务器“(null)”的 OLE DB 提供程序“Microsoft.ACE.OLEDB.12.0”返回消息“Microsoft Access 数据库引擎找不到对象 'C:\WINDOWS\system32\C:\Users\GrimRieber \Desktop\isi test.xlsx'。确保对象存在并且正确拼写其名称和路径名。如果 'C:\WINDOWS\system32\ C:\Users\GrimRieber\Desktop\isi test.xlsx' 是不是本地对象,请检查您的网络连接或联系服务器管理员。”。
消息 7303,第 16 级,状态 1,第 1 行
无法为链接服务器“(null)”初始化 OLE DB 提供程序“Microsoft.ACE.OLEDB.12.0”的数据源对象。
代码:
declare @Database varchar(max)
select @Database = 'C:\Users\GrimRieber\Desktop\isi test.xlsx'
declare @sql varchar(Max)
select @sql = 'SELECT * FROM OPENROWSET(
''Microsoft.ACE.OLEDB.12.0'',
''Excel 12.0; Database= ' + @Database + '; HDR=YES; IMEX=1'',
''SELECT [Vendor],[VendorName],[Material],[MaterialName],[Supplier Stock Num],[01],[02],[03],[04],[05],[06],[07],[08],[09],[10],[11],[12],[Year]FROM [Data$]''
)'
IF OBJECT_ID('tempdb.dbo.#TempScorecardInventorySold', 'U') IS NOT NULL
DROP TABLE #TempScorecardInventorySold;
CREATE TABLE #TempScorecardInventorySold
(
[Vendor] [varchar](50) NULL,
[VendorName] [varchar](50) NULL,
[Material] [varchar](50) NULL,
[MaterialName] [varchar](50) NULL,
[Supplier Stock Num] [varchar](50) NULL,
[01] [nVarchar](50) NULL,
[02] [nVarchar](50) NULL,
[03] [nVarchar](50) NULL,
[04] [nVarchar](50) NULL,
[05] [nVarchar](50) NULL,
[06] [nVarchar](50) NULL,
[07] [nVarchar](50) NULL,
[08] [nVarchar](50) NULL,
[09] [nVarchar](50) NULL,
[10] [nVarchar](50) NULL,
[11] [nVarchar](50) NULL,
[12] [nVarchar](50) NULL,
[Year] [Int] Null
) ON [PRIMARY];
INSERT INTO [dbo].#TempScorecardInventorySold ([Vendor],[VendorName],[Material],[MaterialName],[Supplier Stock Num],[01],[02],[03],[04],[05],[06],[07],[08],[09],[10],[11],[12],[Year])
EXECUTE(@sql)
【问题讨论】:
标签: sql-server stored-procedures insert execute openrowset