问题描述
我收到了这个令人讨厌的错误,但事实是我在查询中没有使用任何JOIN操作。这是代码段:
('Microsoft.ACE.OLEDB.12.0','Excel 12.0;Database=C:\Users\tcmnoc\Desktop\Test.xlsx;','SELECT * FROM ([TradeCloud].[dbo].[Adminlist]')
Select * from [TradeCloud].[dbo].[Adminlist]```
解决方法
假设您的代码段来自OPENROWSET
查询,则您要在试图引用Excel连接中的SQL Server表的数据源中进行合并。连接到Excel工作簿作为数据源时,您只能引用Excel工作表,而不能引用SQL Server表。
因此,无法识别此来源:[TradeCloud].[dbo].[Adminlist]
(用方括号纠正开括号)。而是,连接到工作簿连接中的实际Excel工作表,将命名引用放置在连接字符串之外。在查询下方(调整 mySheet 后应该可以检索仅Excel数据):
SELECT *
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0','Excel 12.0; Database=C:\Users\tcmnoc\Desktop\Test.xlsx;',[mySheet])
在没有更全面的上下文的情况下,我考虑以下假设:
-
也许Excel已连接到
[TradeCloud].[dbo].[Adminlist]
表?如果是这样,则需要与数据库和架构建立直接的单独连接以访问表(绕过只是另一个客户端连接的Excel)。 -
也许您打算填充现有的SQL Server表?如果是这样,请运行所需的append或create-table命令,然后浏览其内容:
-- APPEND TO TABLE INSERT INTO [TradeCloud].[dbo].[Adminlist] (Col1,Col2,Col3,...) SELECT xl.Col1,xl.Col2,xl.Col3,... FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',[mySheet]) xl; -- CREATE TABLE SELECT xl.Col1,... INTO [TradeCloud].[dbo].[Adminlist] FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',[mySheet]) xl; -- BROWSE CONTENTS SELECT * [TradeCloud].[dbo].[Adminlist];
-
也许您正在尝试填充Excel工作簿?如果是这样,请注意,这些命令(
OPENROWSET
和OPENDATASOURCE
)不会填充现有的Excel工作簿,而只是连接到外部源(Excel,Access或其他数据源)作为后端来检索数据