2016-11-09 13 views
0

Я пытаюсь выполнить хранимую процедуру MS-SQL с Java.MS SQL и Java: не удается найти переменную таблицы во время хранимой процедуры вызова

Одним из параметров процедуры является переменная таблицы (в этом случае она называется [Items]). Процедура и переменная таблицы, определенные в отдельной схеме (в этом случае [тест]).

При вызове процедуры возникает следующая ошибка: «com.microsoft.sqlserver.jdbc.SQLServerException: столбец, параметр или переменная @ P1.: Не удается найти элементы данных.».

Я использовал Спринг SimpleJdbcCall и драйвер JDBC Microsoft, - sqljdbc-6.0 для работы с MS-SQL:

SimpleJdbcCall testCall = new SimpleJdbcCall(jdbcTemplate) 
     .withSchemaName("[test]") 
     .withProcedureName("[SomeTestProcedure]") 
     .withoutProcedureColumnMetaDataAccess() 
     .declareParameters(
       new SqlParameter("Id", Types.INTEGER), 
       new SqlParameter("Items", microsoft.sql.Types.STRUCTURED)); 
testCall.compile(); 
SQLServerDataTable sdt; 
try { 
    sdt = new SQLServerDataTable(); 
    sdt.addColumnMetadata("Name", Types.NVARCHAR); 
    sdt.addColumnMetadata("Value", Types.INTEGER); 
    sdt.addRow("DEV", 1); 
    sdt.addRow("PROD", 2); 
} catch (SQLServerException e) { 
    throw new IllegalStateException(e); 
} 
testCall.execute(1, sdt); 

Я был бы признателен за помощь в решении этой проблемы. Благодарю.

ответ

0

Как я узнал, драйвер пытается использовать переменную таблицы из схемы по умолчанию, которая установлена ​​пользователем.

В моем случае [ДБО] -схема был установлен как схемы в по умолчанию. Соответственно, [dbo] -scheme не имеет этой переменной таблицы [Items], которая вызвала ошибку «Не удается найти элементы данных». После того, как мы изменили схему по умолчанию пользователя на [test] (в которой была создана переменная таблицы), ошибка исчезла.