2017-05-26 48 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)" 
之前缺少 空間

編輯:也戈登抓住了一些問題,我敢肯定你的錯誤是因爲空間的近乎加入