將 SQL Server 數據拉入 Excel
我正在嘗試通過 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))
在我看來,有幾種方法可以實現這一目標,但都不是簡單的解決方案。無論您採用哪種方式,我認為您都需要對數據庫進行兩次傳遞:
- 獲取目前公司名稱列表
2)獲取與所選公司相關的所有聯繫人。
首先,您需要決定將公司名稱儲存在何處/如何儲存。您可以將它們儲存在本地表中,並使用數據驗證列表選項通過 CompanyName 列提供查找。這意味著只能選擇列表中的名稱。有利於數據完整性。
或者,如果您不想儲存本地表,則需要執行一些 vba 程式碼來連接數據庫並下載公司名稱。遍歷名稱列表並以您喜歡的任何格式向使用者提供選項。
或者,您可以手動編寫名稱列表,但這將需要在添加新公司名稱時進行額外維護(不理想)。或者,如果你真的很勇敢/很瘋狂,讓使用者在裡面寫公司名稱(我不推薦這個!!!!!!)。
回到您最初的問題,如果您使用的是 MS Query,您應該能夠在查詢編輯器中參數化您的查詢(如果我沒記錯的話?!)。對其進行參數化,以便從使用者選擇公司名稱的單元格中獲取參數值。MS Query 應該為您完成其餘的工作……只要查詢是參數化的客戶端(即在 excel 中)。或者,您可以再次返回 vba 並在程式碼中動態創建查詢字元串,傳入 CompanyName 以替換 @CompanyName 並執行完整的未參數化查詢。
如果您的查詢儲存在伺服器端,那麼可能創建一個儲存過程來接受@CompanyName 作為參數(您需要在您的usp 中編寫您的DECLARE,如前所述)。然後,再次使用 vba 程式碼,您可以動態創建 EXEC 語句以針對連接執行。
這些只是幾個選項,我相信還有其他選項。但是,如果您正在尋找程式碼作為答案,那麼我認為您可能不走運,因為這裡發生的不僅僅是“聲明標量變數@CompanyName”。