通過MSSQL JDBC使用預準備語句:點表示法預處理語句的MS SQL JDBC
CREATE TABLE ##tmp? (ot smalldatetime, value smallint);
CREATE TABLE ##tmp? (ot smalldatetime, value smallint);
作品!
INSERT INTO ##tmp?
SELECT Forecast_Valid_Time, Temperature
FROM fct_masterAll
WHERE Location_ID = ? AND
revision = 0 AND
forecast_type_code = 4 AND
forecaster = 'ETA' AND
Forecast_Issued_Time = ?
ORDER BY Forecast_Valid_Time ASC;
作品!
INSERT INTO ##tmp?
SELECT Forecast_Valid_Time, Temperature
FROM fct_masterAll
WHERE Location_ID = ? AND
revision = 0 AND
forecast_type_code = 4 AND
forecaster = 'MRF' AND
Forecast_Issued_Time = ?
ORDER BY Forecast_Valid_Time ASC;
作品!
但是......
SELECT ##tmp?.ot, (##tmp?.value + ##tmp?.value) FROM ##tmp?, ##tmp?;
Exception in thread "main" com.microsoft.sqlserver.jdbc.SQLServerException: Invalid object name '##[email protected]'.
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:217)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1635)
似乎與上面的SELECT語句中的「點號」的問題。我可以成功執行一個:
SELECT * FROM ##tmp?;
傳入參數。
問題是使用點符號還是與連接?
感謝您的考慮!
不應該'FROM ## TMP?## TMP?'只是'FROM ## TMP?'?您也可以嘗試用雙引號括起表名。 –
@MickMnemonic非常感謝您的快速響應!當你傳入參數時,SELECT語句實際上是:SELECT ## tmp0.ot,(## tmp0.value + ## tmp1.value)FROM ## tmp0,## tmp1; – TheStressMan
A-ha,並不是第一次明白你在試圖傳遞一個參數。你不能像這樣使用綁定變量 - 你只能參數化列_values_,而不是列/表名。包含佔位符('?')的SQL必須是有效的,並且可以解析到沒有值的DB,以便可以事先計算執行計劃等。 –