Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.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的NamedParameterJdbcTemplate:在'@P0';_Sql_Sql Server_Spring Jdbc_Named Parameters - Fatal编程技术网

SQL Server的NamedParameterJdbcTemplate:在'@P0';

SQL Server的NamedParameterJdbcTemplate:在'@P0';,sql,sql-server,spring-jdbc,named-parameters,Sql,Sql Server,Spring Jdbc,Named Parameters,我有以下代码,它对SQLServerDB运行查询。我读过这些链接 但我仍然不明白我在哪里/为什么会得到“@P0”问题。我已将顶部参数括在括号中 private String DEP_AMC_QUERY = "SELECT TOP(1) ((fund_amc-reinsurance_premium)/1000) 作为副amc“+ “来自Staging.dbo.:table”+ “其中,内部资金\代码\标识符=:资金”+ “AND load_id=:load_id;“ 控制台和异常消息为 1

我有以下代码,它对SQLServerDB运行查询。我读过这些链接

但我仍然不明白我在哪里/为什么会得到“@P0”问题。我已将顶部参数括在括号中

private String DEP_AMC_QUERY = "SELECT TOP(1) ((fund_amc-reinsurance_premium)/1000) 
作为副amc“+ “来自Staging.dbo.:table”+ “其中,内部资金\代码\标识符=:资金”+ “AND load_id=:load_id;“

控制台和异常消息为

13:11:12,871 INFO  [ReinsuredFundAssetProcessor] looking up dep_amc value for AXX in AI_IFL_Policy table.

params = 
{
    table = AI_IFL_Policy java.lang.String
    fund = AXX java.lang.String
    load_id = 4356 java.lang.Long
} 
13:11:12,909 ERROR [AbstractStep] Encountered an error executing the step
org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [select top(1) ((fund_amc-reinsurance_premium)/1000) as dep_amc from Hedging_Staging.dbo.? WHERE internal_fund_code_identifier=? AND load_id=?;]; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near '@P0'.
    at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:98)

任何想法?

占位符只允许出现在where子句中,而不允许出现在表名中。因此第一个?(
table
)不会被实际的底层预处理语句替换。我想我必须进行重构以使用未由预处理语句支持的StringBuilder/jdbc查询。不,您可以自己替换
:表
,并将生成的sql传递到
(NamedParameter)JdbcTemplate
13:11:12,871 INFO  [ReinsuredFundAssetProcessor] looking up dep_amc value for AXX in AI_IFL_Policy table.

params = 
{
    table = AI_IFL_Policy java.lang.String
    fund = AXX java.lang.String
    load_id = 4356 java.lang.Long
} 
13:11:12,909 ERROR [AbstractStep] Encountered an error executing the step
org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [select top(1) ((fund_amc-reinsurance_premium)/1000) as dep_amc from Hedging_Staging.dbo.? WHERE internal_fund_code_identifier=? AND load_id=?;]; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near '@P0'.
    at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:98)