【发布时间】:2020-09-22 10:07:12
【问题描述】:
在 java 代码中执行时(db -MS SQL Server)
@Test
public void check (){
String sql = "DECLARE @aa int;\n" +
"EXEC dbo.sc_CheckCode\n" +
" @Code = '2002620020210968',\n" +
" @Result = @aa OUT";
try {
Integer integer = jdbcTemplate.queryForObject(sql, Integer.class);
System.out.println("result: " + integer);
} catch (Exception ex) {
System.out.println("error" + ex.getMessage());
}
}
结果:
StatementCallback; bad SQL grammar [DECLARE @aa int;
EXEC dbo.sc_CheckCode
@Code = '2002620020210968',
@Result = @aa OUT]; nested exception is org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in expression SQL "DECLARE @[*]AA INT;
EXEC DBO.SC_CHECKCODE
@CODE = '2002620020210968',
@RESULT = @AA OUT"; expected "OR, FORCE, VIEW, ALIAS, SEQUENCE, USER, TRIGGER, ROLE, SCHEMA, CONSTANT, DOMAIN, TYPE, DATATYPE, AGGREGATE, LINKED, MEMORY, CACHED, LOCAL, GLOBAL, TEMP, TEMPORARY, TABLE, SYNONYM, PRIMARY, UNIQUE, HASH, SPATIAL, INDEX"
预期结果 = 0 或 -1
我无法理解语法错误是什么...
当我在 DBeaver 中执行时 - 确定(将 select @aa 添加到显示结果的末尾;)
【问题讨论】:
-
我不确定SQL Server JDBC驱动是否支持这样执行SQL代码,主要是select/insert/update/delete。
-
@TimBiegeleisen 它就像“从 CODE = 的表中选择结果?”。我希望结果为 0 或 -1
-
@aa应该是在您的 Java 中声明并传递给准备好的语句的(输出)参数,而不是在语句中声明。以上不会将@aa的值“返回”给应用层,因为它只是在 SQL 范围内定义的变量。
标签: java sql-server jdbc