Ситуация
У меня есть (Tomcat) Java-приложение с использованием jTDS для подключения к базе данных MSSQL 2008. Это приложение Java выполняет 99% хранимых процедур MSSQL с использованием пользовательского ввода.jTDS + хранимые процедуры + prepareSQL = ошибка уровня вложенности?
Проблема
Водитель jTDS отвечает иногда (в разных местах в приложении) с ошибкой:
Maximum stored procedure, function, trigger, or view nesting level exceeded (limit 32).
Мы можем избежать этого путем добавления prepareSQL=0
в строке соединения jTDS. Затем ошибка исчезает везде, но со всеми остальными значениями prepareSQL
ошибка остается. Я не знаю, сколько добавленных уровней хранения вложенных процедур jTDS добавляется, но, судя по всему, это слишком много для нашего приложения.
Вопросы
С только хранимых процедур для выполнения, конечно, используя подготовленные заявления в коде Java, сколько эффект делает
prepareSQL=3
(илиprepareSQL=0
) есть для нас? Другими словами: на каждом сайте я нахожу, что люди говорят: «Никогда не используйтеprepareSQL=0
в производственных условиях», это также применимо к этой ситуации?Если
prepareSQL=0
не рекомендуется, проблема с безопасностью и т. Д., Нам может потребоваться найти другого драйвера. jTDS не обновлялся последние 2 года, и у Microsoft есть драйвер для JDBC 4.0. Однако я не могу найти тесты или сравнения между jTDS и драйвером Microsoft JDBC 4.0. С драйверами Microsoft 2.0 и 3.0 общее мнение показалось, что jTDS работает быстрее, лучше и эффективнее. Это все еще имеет место с JDBC 4.0 или Microsoft передала конкуренту в этом?
Вам удалось определить это поведение для какой-либо конкретной процедуры или это кажется случайным? – heikkim
Нет, у нас пока нет (пока). Мы видели эту ошибку в двух разных реализациях нашего приложения в двух разных местах приложения, но когда это произошло, оно было упрямым и могло быть разрешено только с помощью решения prepareSQL = 0. – bartlaarhoven