Ограничения на отладку Transact-SQL

Этот раздел применим для следующих версий:

Visual Studio Ultimate

Visual Studio Premium

Visual Studio Professional

Visual Studio Express

kkyhd4yb.DoesApplybmp(ru-ru,VS.100).gif kkyhd4yb.DoesApplybmp(ru-ru,VS.100).gif kkyhd4yb.DoesApplybmp(ru-ru,VS.100).gif kkyhd4yb.DoesNotApplybmp(ru-ru,VS.100).gif

При отладке Transact-SQL с помощью отладчика среды Visual Studio и SQL Server начиная с версии SQL Server 2005, существует несколько ограничений, которые следует учитывать. Дополнительные сведения об отладке Transact-SQL с помощью среды SQL Server Management Studio см. в разделе Использование отладчика Transact-SQL.

Многоуровневая отладка SQL

  • При отладке многоуровневых приложений нельзя использовать команду Шаг с заходом для перехода из кода на уровне приложения (C#, Visual Basic или C++) в код на экземпляре SQL Server (Transact-SQL или SQL/CLR).Вместо этого в коде хранимой процедуры нужно установить точку останова и нажимать кнопку Продолжить (F5), чтобы выполнить код до этой точки останова.Для достижения нужной точки без использования точки останова также можно использовать команду Выполнить до курсора.Обратите внимание, что на уровне SQL Server можно перемещаться между кодом Transact-SQL и SQL/CLR.

  • Также невозможен обратный переход из хранимой процедуры в код на уровне, с которого была вызвана эта хранимая процедура.Если требуется продолжить отладку после возвращения на уровень приложения, установите точку останова в коде приложения после точки, из которой была вызвана хранимая процедура.

  • Для улучшения производительности применяются пулы соединений.Когда приложение закрывает свое подключение к данным, соединение с SQL Server закрывается не полностью, оно сохраняется в пуле, который можно будет повторно использовать позднее, если впоследствии приложение попытается снова открыть это соединение.Однако при восстановлении соединения с помощью пула соединений отладка Transact-SQL не включается.

    На время отладки пулы соединений следует отключить.Для этого укажите в строке подключения, используемой для подключения к экземпляру SQL Server, параметр «Pooling=false».Завершив отладку, удалите этот атрибут из строки соединения, и пулы будут по умолчанию включены.

  • Управляемое приложение может подключиться к источнику данных SQL Server с помощью Поставщика данных .NET Framework для SQL Server, при этом обеспечивается лучшая производительность, чем при соединении с помощью OLE DB или ODBC.Теперь можно выполнять отладку управляемого кода и отладку Transact-SQL в рамках одного сеанса отладки.

    Если управляемое приложение работает и пользователь подключается к нему с помощью отладчика, он может выбрать, какую отладку требуется провести.Если требуется выполнить отладку Transact-SQL, то следует выбрать отладку Transact-SQL, если же требуется отладить код SQL/CLR, то также требуется указать и отладку управляемого кода.

  • Отладку Transact-SQL можно выполнить после подключения к выполняющемуся приложению.Следует, однако, отметить, что отлаживать можно только подключения базы данных, созданные после завершения команды Подключение.Итак, если приложение вызывает хранимую процедуру, для работы которой требуется очень длительное время, присоединиться к подключению, вызвавшему эту хранимую процедуру, нельзя. Присоединиться можно только к новым соединениям, вызывающим эту хранимую процедуру после подключения к приложению.

  • Если отладка выполняется по соединению, установленному с помощью объекта OleDbDataAdapter, то при ожидании в течение значительного времени после достижения точки останова соединение будет переведено в режим ожидания.Если после истечения этого времени ожидания пользователь попытается продолжить отладку (например, выбрав команду Продолжить из меню Отладка), отладчик прекратит свою работу (а не продолжит выполнение).Подобный результат является ожидаемым.Отладчик прекращает работу, поскольку объект OleDbDataAdapter, в отличие от SqlDataAdapter, не формирует исключение по истечении времени ожидания.Для решения этой проблемы время ожидания необходимо увеличить при использовании OleDbDataAdapter.

    Дополнительные сведения о задании значения времени ожидания для поставщиков данных .NET Framework см. в разделах Свойство OleDbCommand.CommandTimeout и Свойство SqlCommand.CommandTimeout документации по библиотеке классов платформы .NET Framework.

Другие ограничения

  • Для отладки триггеров требуется вызывать их срабатывание. Непосредственная отладка триггеров невозможна.Вместо этого начинайте отладку хранимой процедуры, которая вызывает срабатывание триггера.

  • При отладке в реальном времени последовательность вложенных запросов (например, в операции UNION) может заполнить сетевой буфер.Из-за этого выполнение кода, который обычно выполняется нормально, может быть приостановлено во время отладки.Для получения следующих данных используйте методы RecordSet.MoveNext и RecordSet.NextRecordSet.

  • Если в имени хранимой процедуры есть кавычки, может появиться сообщение об ошибке отладчика.Дополнительные сведения см. в разделе Ошибка при отладке процедур, в именах которых есть кавычки.

  • Кэшированные значения автоматически не изменяются.Нельзя ожидать, что изменения, внесенные в локальные переменные или параметры, кэшированные интерпретатором Transact-SQL, будут всегда вступать в действие в течение прохождения по инструкции Transact-SQL.Хотя значение и изменено, его проверка может больше не выполняться.Невозможно принудительно обновить кэшированные значения.Значения кэшируются, поскольку план выполнения SQL Server определяет, что значения некоторых переменных не будут динамически загружаться для исполнения или ссылки каждой инструкции.Для получения дополнительных сведений выполните поиск по ключевому слову «SHOWPLAN» в документации по SQL Server.

  • Невозможно присоединиться к собственному процессу SQL Server, одновременно отлаживая хранимую процедуру.

См. также

Основные понятия

Отладка Transact-SQL

Ограничения на команды и функции отладчика

Другие ресурсы

Debugger Security