Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 点表示法准备语句MS SQL JDBC_Sql Server_Jdbc_Prepared Statement - Fatal编程技术网

Sql server 点表示法准备语句MS SQL JDBC

Sql server 点表示法准备语句MS SQL JDBC,sql-server,jdbc,prepared-statement,Sql Server,Jdbc,Prepared Statement,通过MSSQL 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

通过MSSQL 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;
工作

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;
工作

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 '##tmp@P3'.
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:217)
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1635)
上面SELECT语句中的“点符号”似乎有问题。我可以成功执行以下操作:

SELECT * FROM ##tmp?;
传入参数

点符号或连接有问题吗


谢谢你的考虑

你试过使用别名吗

SELECT A.ot, ( A.value + B.value ) FROM ##tmp? A, ##tmp? B;
这样,您就可以从select中删除变量引用,同时仍保留它们以供实际选择表


猜测。可能有用,可能失败,可能让我看起来很傻:-

你试过化名吗

SELECT A.ot, ( A.value + B.value ) FROM ##tmp? A, ##tmp? B;
这样,您就可以从select中删除变量引用,同时仍保留它们以供实际选择表


猜测。可能会工作,可能会失败,可能会让我看起来很傻:-

不应该来自tmp?tmp?只是来自tmp??您也可以尝试用双引号将表名括起来。@MickMemonic非常感谢您的快速响应!当您传入“参数”时,SELECT语句实际上是:从tmp0、tmp1中选择tmp0.ot、tmp0.value+tmp1.value;A-ha,我一开始不知道你试图在那里传递一个参数。不能像那样使用绑定变量-只能参数化列值,不能参数化列/表名。保存占位符的SQL?必须是有效的,并且可以在没有值的情况下解析到DB,以便可以事先计算执行计划等。实际上,我不知道您的第一个示例如何工作,除非您有一个名为tmp?@MickMnemonic的表,非常感谢!在您得到所述SELECT语句之前,一切都正常。我可以通过tmp将参数传递到SELECT*?并得到一个结果集。当我尝试使用点符号进行连接时,它开始抱怨。除非有其他事情发生…我需要找到一个不同的方法。再次感谢您的快速回复!不应该来自tmp?,tmp?只是来自tmp??您也可以尝试用双引号将表名括起来。@MickMemonic非常感谢您的快速响应!当您传入“参数”时,SELECT语句实际上是:从tmp0、tmp1中选择tmp0.ot、tmp0.value+tmp1.value;A-ha,我一开始不知道你试图在那里传递一个参数。不能像那样使用绑定变量-只能参数化列值,不能参数化列/表名。保存占位符的SQL?必须是有效的,并且可以在没有值的情况下解析到DB,以便可以事先计算执行计划等。实际上,我不知道您的第一个示例如何工作,除非您有一个名为tmp?@MickMnemonic的表,非常感谢!在您得到所述SELECT语句之前,一切都正常。我可以通过tmp将参数传递到SELECT*?并得到一个结果集。当我尝试使用点符号进行连接时,它开始抱怨。除非有其他事情发生…我需要找到一个不同的方法。再次感谢您的快速回复@简…非常感谢你的回复!你的解决方案让我更接近了,但还是不起作用。您的解决方案使解析器更加快乐。我能够无错误地执行代码…但是…没有空的结果集。当我从纯SQL执行查询时,也就是说,没有准备好的语句,查询就会工作。自那以后,我不得不转向另一种方法。@Jan…非常感谢您的回复!你的解决方案让我更接近了,但还是不起作用。您的解决方案使解析器更加快乐。我能够无错误地执行代码…但是…没有空的结果集。当我从纯SQL执行查询时,也就是说,没有准备好的语句,查询就会工作。此后,我不得不转向另一种方法。