2017-05-26 170 views
0

我在学习专门连接到SQL并提取一些帐户详细信息的VBA脚本。但是,我得到一个语法错误“关键字‘加入’附近语法错误。你能帮我找到语法错​​误。VBA中的语法错误“JOIN”

 strQuery = "" _ 
         & "DECLARE @Perns TABLE(Id INT)" _ 
         & " INSERT INTO @Perns (Id)" _ 
         & " SELECT 4098 " _ 
         & " SELECT ddm.FirstName, ddm.LastName, am.alias AS Alias, ddm.PersonnelNbr AS N'Pern#', nam.parent_OU_DN, gc.PersonGroupDesc AS N'AccManNG Status' " _ 
         & " FROM @Perns AS p" _ 
         & "LEFT OUTER JOIN [Accmanng].[dbo].[directory_data_master] ddm ON p.Id=ddm.PersonnelNbr" _ 
         & "LEFT OUTER JOIN [Accmanng].[dbo].[alias_master] am ON am.alias_id = ddm.alias_id" _ 
         & "LEFT OUTER JOIN [Accmanng].[dbo].[network_account_master] nam ON AM.alias_id = nam.alias_id" _ 
         & "LEFT OUTER JOIN [Accmanng].[dbo].[dim_groupcode] gc ON ddm.PersonGroupCode=gc.PersonGroupCode " _ 
         & "WHERE ddm.PersonnelNbr in (SELECT Id FROM @perns)" 


    rst.Open strQuery, ConnectString 


    Sheets(1).Range("A2").CopyFromRecordset rst 
+0

什么是'N'Pern#''和'N'AccManNG Status''? –

+1

'LEFT'之前还有空吗? –

+0

它改变了列名称,这只是让它更容易阅读。这样当我们复制标题时已经标记了Headers。 – RyanWilliamWest

回答

1

打印出你的代码大约19倍出20,使错误明显。

你的代码的前几行是:

DECLARE @Perns TABLE(Id INT) 
INSERT INTO @Perns (Id) 
SELECT 4098 
SELECT ddm.FirstName, ddm.LastName, am.alias AS Alias, ddm.PersonnelNbr AS N'Pern#', nam.parent_OU_DN, gc.PersonGroupDesc AS N'AccManNG Status' 

. . . 

这不是有效的SQL:

SELECT 4098 SELECT ddm.FirstName 
+1

打败我吧!除了额外的选择,还有大量的间距问题。 –

+0

你能否详细说明这不是一个有效的陈述。 如果我有INSERT INTO Perns(ID)并使用Select存储这些变量,稍后使用Second select调用它并说出它来自哪里。例如FROM Perns AS P,然后创建外部连接。 – RyanWilliamWest

+0

@RyanWilliamWest。 。 。我认为这很基本,为什么'SELECT 4098 SELECT ddm.FirstName'不是有效的SQL。一个'SELECT'语句只有一个'SELECT'子句。 –

3

JOIN子句

 strQuery = "" _ 
        & "DECLARE @Perns TABLE(Id INT)" _ 
        & " INSERT INTO @Perns (Id)" _ 
        & " SELECT 4098 " _ 
        & " SELECT ddm.FirstName, ddm.LastName, am.alias AS Alias, ddm.PersonnelNbr AS N'Pern#', nam.parent_OU_DN, gc.PersonGroupDesc AS N'AccManNG Status' " _ 
        & " FROM @Perns AS p" _ 
        & " LEFT OUTER JOIN [Accmanng].[dbo].[directory_data_master] ddm ON p.Id=ddm.PersonnelNbr" _ 
        & " LEFT OUTER JOIN [Accmanng].[dbo].[alias_master] am ON am.alias_id = ddm.alias_id" _ 
        & " LEFT OUTER JOIN [Accmanng].[dbo].[network_account_master] nam ON AM.alias_id = nam.alias_id" _ 
        & " LEFT OUTER JOIN [Accmanng].[dbo].[dim_groupcode] gc ON ddm.PersonGroupCode=gc.PersonGroupCode " _ 
        & " WHERE ddm.PersonnelNbr in (SELECT Id FROM @perns)" 
之前缺少 空间

编辑:也戈登抓住了一些问题,我敢肯定你的错误是因为空间的近乎加入