SQL Server的NamedParameterJdbcTemplate:在'@P0';
我有以下代码,它对SQLServerDB运行查询。我读过这些链接 但我仍然不明白我在哪里/为什么会得到“@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
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)