SELECT [Sheet1$].ID,
CLng([Sheet1$].RecordID) AS RecordID,
[Sheet1$].col1,
[Sheet1$].col2,
[Sheet1$].col3,
[Sheet1$].col4,
[Sheet1$].col5,
[Sheet2$].Name
FROM [Sheet1$]
INNER JOIN [Sheet2$] ON
[Sheet1$].RecordID = [Sheet2$].RecordID
我在SSIS Excel Source组件中有上面的示例SQL命令。如该查询所示,我在同一工作簿中的两个Excel工作表(Sheet1和Sheet2)上进行内部连接。
此时查询执行良好,没有任何错误。
但是,我无法加入第3张(Sheet3)。当我尝试在sheet3上内部联接时,我收到以下错误消息。
OLE DB记录可用。来源:" Microsoft Access数据库引擎" Hresult:0x80040E14描述:"查询表达式中的语法错误(缺少运算符)' [Sheet1 $]。RecordID = [Sheet2 $]。ReportID INNER JOIN [Sheet3 $] ON [Sheet1 $]。RecordID = [Sheet3 $] .RadidID'
所以我基本上无法在两个或多个Excel工作表上进行内部联接。我只能在一张excel表上进行内部联接。我正在使用的语法在SQL Server中工作,所以我很想知道 如果它应该在SSIS Excel源SQL命令中工作,因为它似乎使用Microsoft Access数据库引擎。
以下是产生上述错误的第二个联接的查询:
SELECT [Sheet1$].ID,
CLng([Shee1$].RecordID) AS RecordID,
[Sheet1$].col1,
[Sheet1$].col2,
[Sheet1$].col3,
[Sheet1$].col4,
[Sheet1$].col5,
[Sheet2$].Name
FROM [Sheet1$]
INNER JOIN [Sheet2$] ON
[Sheet1$].RecordID = [Sheet2$].RecordID
INNER JOIN [Sheet3$] ON
[Sheet1$].RecordID = [Sheet3$].RecordID
答案 0 :(得分:2)
好吧,我这样做是错误的。 SSIS Excel Source组件使用的Microsoft访问数据库引擎处理连接的方式与SQL Server不同。
显然,你需要在from之后留下n - 2个左括号 每个新连接开始之前的子句和一个右括号 除第一个之外的子句,其中n是表的数量 联合起来。
原因是Access的连接语法仅支持连接两个 一次只能表,所以如果你需要加入两个以上的表 将额外的括号括在括号中。
引自Access-SQL: Inner Join with multiple tables
并在http://office.microsoft.com/en-001/access-help/inner-join-operation-HA001231487.aspx
确认以下查询现在可以使用
SELECT [Sheet1$].ID,
CLng([Shee1$].RecordID) AS RecordID,
[Sheet1$].col1,
[Sheet1$].col2,
[Sheet1$].col3,
[Sheet1$].col4,
[Sheet1$].col5,
[Sheet2$].Name
FROM (([Sheet1$])
INNER JOIN [Sheet2$] ON [Sheet1$].RecordID = [Sheet2$].RecordID)
INNER JOIN [Sheet3$] ON [Sheet1$].RecordID = [Sheet3$].RecordID
答案 1 :(得分:0)
让我们试着作弊:
SELECT
CLng(x.RecordID) AS RecordID,
x.col1,
x.col2,
x.col3,
x.col4,
x.col5,
x.Name
FROM (
SELECT
[Sheet1$].RecordID,
[Sheet1$].col1,
[Sheet1$].col2,
[Sheet1$].col3,
[Sheet1$].col4,
[Sheet1$].col5,
[Sheet2$].Name
FROM [Sheet1$]
INNER JOIN [Sheet2$] ON
[Sheet1$].RecordID = [Sheet2$].RecordID
) as x
INNER JOIN [Sheet3$] ON
x.RecordID = [Sheet3$].RecordID