Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
SQL Server обеспечивает поддержку отладки объектов Transact-SQL и среды CLR в базе данных. Ключевыми аспектами отладки в SQL Server являются простота настройки и использования, а также интеграция отладчика SQL Server с отладчиком Microsoft Visual Studio. Более того, процесс отладки охватывает код на всех применяемых языках: Пользователи могут легко переходить к объектам СРЕДЫ CLR из Transact-SQL и наоборот. Отладчик Transact-SQL в SQL Server Management Studio нельзя использовать для отладки объектов управляемой базы данных, но можно отлаживать объекты с помощью отладчиков в Visual Studio. Отладка объектов управляемой базы данных в Visual Studio поддерживает все распространенные функции отладки, такие как операторы step into и step over в подпрограммах, выполняемых на сервере. Отладчики могут задавать точки останова, просматривать стек вызова, проверять значения переменных и изменять значения переменных во время отладки. Обратите внимание, что Visual Studio .NET 2003 нельзя использовать для программирования интеграции среды CLR или отладки. SQL Server включает предварительно установленную платформу .NET Framework, а Visual Studio .NET 2003 не может использовать сборки .NET Framework 2.0.
Дополнительные сведения об отладке управляемого кода с помощью Visual Studio см. в разделе "Отладка управляемого кода" в документации по Visual Studio.
Отладка разрешений и ограничений
Отладка — это операция с высоким уровнем привилегий, поэтому в SQL Server разрешены только члены предопределенных ролей сервера sysadmin .
При отладке применяются следующие ограничения.
При отладке процедур CLR можно использовать одновременно только один экземпляр отладчика. Это ограничение применяется, так как все выполнение кода CLR зависает, когда точка останова будет достигнута, и выполнение не продолжается до тех пор, пока отладчик не переходит из точки останова. Однако вы можете продолжить отладку Transact-SQL в других подключениях. Хотя Transact-SQL отладке не заморозить другие выполнения на сервере, это может привести к тому, что другие подключения подождите, удерживая блокировку.
Существующие подключения нельзя отладить, только новые подключения, так как SQL Server требует сведений о среде клиента и отладчика, прежде чем подключиться.
Из-за указанных выше ограничений рекомендуется отладить код clR и Transact-SQL на тестовом сервере, а не на рабочем сервере.
Общие сведения об отладке объектов управляемой базы данных
Отладка в SQL Server следует модели для каждого подключения. Отладчик может обнаруживать и отлаживать действия только к клиентскому подключению, к которому он подключен. Так как функциональные возможности отладчика не ограничены типом подключения, можно отлаживать как табличный поток данных (TDS), так и HTTP-подключения. Однако SQL Server не разрешает отладку существующих подключений. Процесс отладки поддерживает общие функции отладки внутри процедур, выполняемых на сервере. Взаимодействие между отладчиком и SQL Server происходит через распределенную объектную модель компонента (COM).
Дополнительные сведения и сценарии отладки управляемых хранимых процедур, функций, триггеров, определяемых пользователем типов и агрегатов см. в разделе "Отладка базы данных интеграции СРЕДЫ CLR SQL Server" в документации по Visual Studio.
Сетевой протокол TCP/IP должен быть включен в экземпляре SQL Server, чтобы использовать Visual Studio для удаленной разработки, отладки и разработки. Дополнительные сведения о включении протокола TCP/IP на сервере см. в разделе "Настройка клиентских протоколов".
Отладка объекта управляемой базы данных
Откройте Microsoft Visual Studio, создайте проект SQL Server и установите подключение к базе данных на экземпляре SQL Server.
Создайте новый тип. В обозревателе решений щелкните проект правой кнопкой мыши, выберите "Добавить " и "Создать элемент". В окне "Добавление нового элемента" выберите хранимую процедуру, User-Defined функцию, User-Defined тип, триггер, агрегат или класс. Укажите имя исходного файла нового типа и нажмите кнопку "Добавить".
Добавьте в текстовый редактор код для нового типа. Пример кода для примера хранимой процедуры см. далее в этом разделе.
Добавьте скрипт, который проверяет тип. В обозревателе решений разверните каталог TestScripts дважды щелкните Test.sql , чтобы открыть исходный файл скрипта по умолчанию. Добавьте тестовый скрипт, который вызывает код для отладки, в текстовый редактор. См. ниже пример скрипта.
Поместите одну или несколько точек останова в исходный код. Щелкните правой кнопкой мыши строку кода в текстовом редакторе в пределах функции или подпрограммы, которую вы хотите отлаживать, и выберите точку останова и вставьте точку останова. Точка останова добавится, а строка кода будет выделена красным цветом.
В меню отладки выберите "Начать отладку", чтобы скомпилировать, развернуть и протестировать проект. Тестовый скрипт в Test.sql будет запущен, а объект управляемой базы данных будет вызван.
Когда желтая стрелка, назначающая указатель инструкции, появится на приостановке выполнения кода останова, и вы можете начать отладку объекта управляемой базы данных. Вы можете перейти из меню отладки , чтобы перейти к следующей строке кода. Окно "Локальные" используется для наблюдения за состоянием объектов, выделенных указателем инструкции. Переменные можно добавить в окно "Контроль ". Состояние отслеживаемых переменных можно наблюдать во всем сеансе отладки, а не только в том случае, если переменная находится в строке кода, выделенной указателем инструкции. Выберите "Продолжить" в меню отладки, чтобы перейти к следующей точке останова или завершить выполнение подпрограммы, если нет больше точек останова.
Пример
В следующем примере возвращается версия SQL Server вызывающей объекту.
C#
using System;
using System.Data;
using System.Data.SqlTypes;
using System.Data.SqlClient;
using Microsoft.SqlServer.Server;
public class StoredProcedures
{
[Microsoft.SqlServer.Server.SqlProcedure]
public static void GetVersion()
{
using(SqlConnection connection = new SqlConnection("context connection=true"))
{
connection.Open();
SqlCommand command = new SqlCommand("select @@version",
connection);
SqlContext.Pipe.ExecuteAndSend(command);
}
}
}
Visual Basic
Imports System
Imports System.Data
Imports System.Data.Sql
Imports System.Data.SqlTypes
Imports Microsoft.SqlServer.Server
Imports System.Data.SqlClient
Partial Public Class StoredProcedures
<Microsoft.SqlServer.Server.SqlProcedure> _
Public Shared Sub GetVersion()
Using connection As New SqlConnection("context connection=true")
connection.Open()
Dim command As New SqlCommand("SELECT @@VERSION", connection)
SqlContext.Pipe.ExecuteAndSend(command)
End Using
End Sub
End Class
Ниже приведен тестовый скрипт, который вызывает хранимую процедуру GetVersion, определенную выше.
EXEC GetVersion
См. также
Концепции программирования интеграции с Common Language Runtime (CLR)