Sql-Server

將 SQL Server 數據拉入 Excel

  • July 25, 2020

我正在嘗試通過 ODBC / Microsoft Query(內置於 Excel)將 SQL Server 數據庫中的數據提取到 Excel 2016 中。

我想要一個公司下拉列表,從下拉列表中選擇公司後,將顯示該公司的所有聯繫人(來自單獨的聯繫人表)。

根據我到目前為止所學到的知識,我需要使用:field@field指示使用者選擇 - 例如:

SELECT Company.CompanyName,
      CompanyContacts.Forename,
      CompanyContacts.Surname,
      CompanyContacts.Email
FROM Commercial.CompanyContacts CompanyContacts
    INNER JOIN Commercial.Company Company
       ON (CompanyContacts.CompanyID = Company.CompanyID)
WHERE (UPPER (Company.CompanyName) = UPPER (@CompanyName))

但Excel / MS Query 返回:

“必須聲明標量變數“@CompanyName”。無法準備語句。”

誰能建議我如何聲明標量變數?假設這甚至是我在這裡真正需要做的。非常感謝。

將您的聲明放在頂部。變數在批處理或過程的主體中使用 DECLARE 語句聲明,並通過使用 SET 或 SELECT 語句分配值。

DECLARE @CompanyName VARCHAR(200);
SET @CompanyName = 'CompanyName';

SELECT Company.CompanyName,
      CompanyContacts.Forename,
      CompanyContacts.Surname,
      CompanyContacts.Email
FROM Commercial.CompanyContacts CompanyContacts
    INNER JOIN Commercial.Company Company
       ON (CompanyContacts.CompanyID = Company.CompanyID)
WHERE (UPPER (Company.CompanyName) = UPPER (@CompanyName))

在我看來,有幾種方法可以實現這一目標,但都不是簡單的解決方案。無論您採用哪種方式,我認為您都需要對數據庫進行兩次傳遞:

  1. 獲取目前公司名稱列表

2)獲取與所選公司相關的所有聯繫人。

首先,您需要決定將公司名稱儲存在何處/如何儲存。您可以將它們儲存在本地表中,並使用數據驗證列表選項通過 CompanyName 列提供查找。這意味著只能選擇列表中的名稱。有利於數據完整性。

或者,如果您不想儲存本地表,則需要執行一些 vba 程式碼來連接數據庫並下載公司名稱。遍歷名稱列表並以您喜歡的任何格式向使用者提供選項。

或者,您可以手動編寫名稱列表,但這將需要在添加新公司名稱時進行額外維護(不理想)。或者,如果你真的很勇敢/很瘋狂,讓使用者在裡面寫公司名稱(我不推薦這個!!!!!!)。

回到您最初的問題,如果您使用的是 MS Query,您應該能夠在查詢編輯器中參數化您的查詢(如果我沒記錯的話?!)。對其進行參數化,以便從使用者選擇公司名稱的單元格中獲取參數值。MS Query 應該為您完成其餘的工作……只要查詢是參數化的客戶端(即在 excel 中)。或者,您可以再次返回 vba 並在程式碼中動態創建查詢字元串,傳入 CompanyName 以替換 @CompanyName 並執行完整的未參數化查詢。

如果您的查詢儲存在伺服器端,那麼可能創建一個儲存過程來接受@CompanyName 作為參數(您需要在您的usp 中編寫您的DECLARE,如前所述)。然後,再次使用 vba 程式碼,您可以動態創建 EXEC 語句以針對連接執行。

這些只是幾個選項,我相信還有其他選項。但是,如果您正在尋找程式碼作為答案,那麼我認為您可能不走運,因為這裡發生的不僅僅是“聲明標量變數@CompanyName”。

引用自:https://dba.stackexchange.com/questions/193202