Это, вероятно, довольно просто, так что потерпите меня (с другой стороны, возможно, есть хороший блестящий ответ!)
Я сейчас диагностирую проблему взаимоблокировки, и действительно вижу, что один из моих сеансов заблокирован другим. (Другим концом тупика являются потоки Java, ожидающие друг друга в обратном порядке.) При отображении сведений о процессах в проводнике процессов Management Studio выдается SQL для заблокированного сеанса, но SQL для блока ing * Сессия 1004 * отображается исключительно как "EXEC sp_unprepare 807
".
Теперь я понимаю, что это связано с подготовленными утверждениями, и поэтому меня это не беспокоит само по себе. Тем не менее, я хотел бы знать, что на самом деле был SQL, так что я знаю, куда бросить подозрительный взгляд на кодовую базу. Итак, на данный момент, как лучше всего соотнести это с фактическим SQL, который был выполнен этим потоком? Существует ли системная таблица, в которой я могу найти сопоставление подготовленных операторов и их SQL? Возможно, таблица, в которой хранятся последние n операторов SQL для сеанса, который, как мы надеемся, будет содержать вызов prepare
? Есть ли флаг, который я могу установить в соединении с драйвером базы данных, чтобы полностью отключить подготовленные операторы для этого сеанса?
Я также приветствовал бы альтернативные подходы к этой проблеме, если бы они были лучшим способом сделать это (в основном я подозреваю, что есть некоторый код Java, который не удается зафиксировать после изменения таблицы, и я хотел бы знать, SQL, чтобы помочь мне узнать, где это).