我正在使用MS Access進行一些計算。下面是給我找麻煩整體代碼:SQL語句中的變量方程式的放置位置?
Dim cmd3 As OleDbCommand = New OleDbCommand("INSERT INTO Criteria (Calculation, [Interval], Tier_Juncture_1, Weight) _
SELECT ?, ?, (M * 0) + B _AS Tier_Juncture_1, _
((Avg(C." & Calculation & " * G.Growth) - Avg(C." & Calculation & ") * Avg(G.Growth))/(StDevP(C." & Calculation & ") * StDevP(G.Growth)) * 10) AS Weight _
FROM (Sum(G.Growth)/Count(*)) - (1 * (Sum(C." & Calculation & ")/Count(*))) AS B, _
(Sum(C." & Calculation & " * G.Growth) - ((Sum(C." & Calculation & ") * Sum(G.Growth))/Count(*)))/(Sum(C." & Calculation & " * C." & Calculation & ") - ((Sum(C." & Calculation & ") * Sum(C." & Calculation & ")/Count(*)))) AS M, _
" & Calculation & " AS C INNER JOIN " & Growth_Rate & " AS G _
" & On_Statement & "", con)
cmd3.Parameters.AddWithValue("@Calculation", Calculation)
cmd3.Parameters.AddWithValue("@[Interval]", Interval)
cmd3.ExecuteNonQuery()
更具體地講,我的目標是插入這個公式,我的表在現場Tier_Juncture_1
命名Criteria
結果:
(M * 0) + B _AS Tier_Juncture_1
正如你所看到的,我在這個方程中有兩個變量,M
和B
。下面是公式的每個:
(Sum(G.Growth)/Count(*)) - (1 * (Sum(C." & Calculation & ")/Count(*))) AS B
(Sum(C." & Calculation & " * G.Growth) - ((Sum(C." & Calculation & ") * Sum(G.Growth))/Count(*)))/(Sum(C." & Calculation & " * C." & Calculation & ") - ((Sum(C." & Calculation & ") * Sum(C." & Calculation & ")/Count(*)))) AS M
我的問題是,凡在我的SQL語句,我把公式爲我的兩個變量SOT我原來的公式Tier_Juncture_1
可以使用變量?正如你在上面看到的,我試圖把它們放在我的FROM
條款中,但是我得到這個錯誤:Syntax error in FROM clause.
變量本身的公式應該沒有任何問題。我已經獨立測試了它們,並且都返回了正確的值,沒有錯誤。我只需要知道將它們放在我的SQL語句中的位置。
UPDATE
每下面的建議,我從我的SQL語句中刪除的參數。現在看起來是這樣的:
Dim cmd3 As OleDbCommand = New OleDbCommand("INSERT INTO Criteria (Calculation, [Interval], Tier_Juncture_1, Weight) _
SELECT " & Calculation & ", " & Interval & ", (M * 0) + B AS Tier_Juncture_1, _
((Avg(C." & Calculation & " * G.Growth) - Avg(C." & Calculation & ") * Avg(G.Growth))/(StDevP(C." & Calculation & ") * StDevP(G.Growth)) * 10) AS Weight _
FROM (Sum(G.Growth)/Count(*)) - (1 * (Sum(C." & Calculation & ")/Count(*))) AS B, _
(Sum(C." & Calculation & " * G.Growth) - ((Sum(C." & Calculation & ") * Sum(G.Growth))/Count(*)))/(Sum(C." & Calculation & " * C." & Calculation & ") - ((Sum(C." & Calculation & ") * Sum(C." & Calculation & ")/Count(*)))) AS M, _
" & Calculation & " AS C INNER JOIN " & Growth_Rate & " AS G _
" & On_Statement & "", con)
cmd3.ExecuteNonQuery()
但是當我運行此我得到以下錯誤:Syntax error in FROM Clause.
我相信,因爲我插入了我原來的變量方程M
和B
我得到這個錯誤帖子。所以我的問題依然存在。我在哪裏可以將這些公式放在我的SQL語句中。
月2日更新
這裏是Debug.Writeline(cmd3.CommandText)
返回的SQL語句:
INSERT INTO Criteria (Calculation, [Interval], Tier_Juncture_1, Weight) SELECT Current_Ratio, MRQ, (M * 0) + B AS Tier_Juncture_1, ((Avg(C.Current_Ratio * G.Growth) - Avg(C.Current_Ratio) * Avg(G.Growth))/(StDevP(C.Current_Ratio) * StDevP(G.Growth)) * 10) AS Weight FROM (Sum(G.Growth)/Count(*)) - (1 * (Sum(C.Current_Ratio)/Count(*))) AS B, (Sum(C.Current_Ratio * G.Growth) - ((Sum(C.Current_Ratio) * Sum(G.Growth))/Count(*)))/(Sum(C.Current_Ratio * C.Current_Ratio) - ((Sum(C.Current_Ratio) * Sum(C.Current_Ratio)/Count(*)))) AS M, Current_Ratio AS C INNER JOIN Quarterly_Growth_Rates AS G ON (C.Ticker = G.Ticker) AND ((IIF(C.Period = 4, C.Year + 1, C.Year)) = G.Year) AND ((IIF(C.Period = 4, 1, C.Period + 1)) = G.Qtr)
您的查詢CommandText正嘗試使用'SELECT?,?,... FROM ...',並且參數化查詢無法執行此操作。參數只能用於指定列*值*,而非列*名稱*或任意SQL文本。這可能是您實際上需要將SQL CommandText「粘合在一起」而不是使用參數替換的情況之一。 –
@GordThompson我會如何「正確地粘合」我的SQL? – gromit1
@GordThompson根據你的建議,我已經拿出了參數。新代碼列在我原來的帖子中。現在我得到這個錯誤'FROM子句中的語法錯誤'。我相信我得到這個錯誤是因爲我從原始文章中插入了變量'M'和'B'的方程。所以我的問題依然存在。我在哪裏可以將這些公式放在我的SQL語句中。 – gromit1