![](/img/trans.png)
[英]OLE DB / ODBC error: no value given for one or more required parameters
[英]Excel parameters from SQL Query from ODBC "Error - No Value given for one or more required parameters when using question mark `WHERE XXX = ?`
我有一個Excel文件,該文件具有與MS SQL服務器的SQLOLEDB
連接,
當我通過Oracle鏈接執行此操作時,我可以簡單地將WHERE XXX = ?
在我的查詢中提示輸入Excel中的值,但是使用MSSQL時出現以下錯誤:
沒有為一個或多個必需參數給出值
嘗試將基本的Excel查詢從值參數化為?
如果我使用這樣的值,我會得到結果:
SELECT *
FROM srv.stats
WHERE srv.stats.[year] = '2016'
AND srv.stats.[quarter] = '1'
當我添加參數時?
我收到上述錯誤。
SELECT *
FROM srv.stats
WHERE srv.stats.[year] = ?
AND srv.stats.[quarter] = ?
我希望不使用VB就能做到這一點。
由於來自ODBC連接的MS SQL源在本質上不允許您使用WHERE xxx = ?
SQL查詢中的代碼(與Oracle連接不同),您需要欺騙Excel以通過構建Microsoft Query然后覆蓋它來允許MS SQL數據源中的參數。
打開一個新的Excel文件,然后轉到“ Data
標簽,選擇“ From Other Sources
下拉菜單,然后選擇“ From Microsoft Query
。
將出現“ Choose Data Source
窗口。 選擇一個現有數據源或通過選擇<New Data Source>
來建立與服務器的新連接,然后單擊OK。
完成后,您將看到打開了查詢向導窗口以選擇表和列,因為稍后將要添加自己的SQL查詢時,只需選擇查詢中的一個表並將其添加到查詢中的Columns in your query:
使用>
按鈕。 對於接下來的2個窗口,只需單擊“ Next
,然后最后單擊Next
Finish
。
然后,系統將提示您選擇要如何在“ Import Data
窗口中查看數據,首先單擊“ Properties...
按鈕。
然后,在“ Command text:
框中的“ Definition
選項卡上,您將具有一個SELECT
語句,在此下方,您需要為實際查詢中的金額添加WHERE
子句。 這些必須以以下格式添加:
WHERE 1 = ?
AND 2 = ?
AND 3 = ?
完成此操作后,單擊“確定”返回“導入數據”窗口並選擇您的輸出類型。 表,數據透視表報表或數據透視圖和數據透視表報表,取決於您要如何顯示數據。
然后將提示您為每個參數輸入一個值。 如果要從“單元格”中獲取這些值,請按照輸入實際參數的順序選擇它們的位置。 輸入參數源后,請返回“數據”選項卡,單擊“連接”,然后單擊“定義”選項卡。
現在,在“ Command text:
框中,在您的實際SQL查詢中粘貼您的參數,並在WHERE
子句= ?
參數= ?
並以與您定義源相同的順序,然后單擊“確定”,您的數據現在應該像通常使用的參數那樣填充。
無法像在Access中一樣以直接的方式在SQL Server中直接提示輸入。 您可以像這樣將值傳遞給查詢。
DECLARE @year SMALLINT
SET @year = 2016
DECLARE @quarter TINYINT
SET @quarter = 1
SELECT *
FROM srv.stats
WHERE srv.stats.[year] = @year
AND srv.stats.[quarter] = @quarter;
然后,您只需要找到一種適合您的解決方案的方法(Excel?)即可通過這些方法。 例如,這可能采用存儲過程的形式。
CREATE PROCEDURE testProcedure @year SMALLINT, @quarter TINYINT
AS
SELECT *
FROM srv.stats
WHERE srv.stats.[year] = @year
AND srv.stats.[quarter] = @quarter
GO;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.