Как выбрать строки внутри хранимой процедуры CLR в MS SQL Server 2008?

Следуя примеру, найденному в Интернете, я написал следующий код C#, который реализует хранимую процедуру CLR в MS SQL Server 2008:

public class Class1
{
    [Microsoft.SqlServer.Server.SqlProcedure]
    public static void CountStringLength(string inputString)
    {
        SqlContext.Pipe.Send(inputString.Length.ToString());            
    }
}

Эта процедура принимает строку в качестве параметра и выводит количество символов в строке.

Я работал над кодом, который извлекает данные из SQL; нет ничего особенного в том, как данные извлекаются: он устанавливает соединение с сервером SQL, выбирает данные и затем закрывает соединение. Я хочу, чтобы этот код выполнялся внутри хранимой процедуры или запуска на моем сервере SQL.

Я полагаю, что я мог бы заставить код работать точно так же, как существующий код SQL: установить соединение с сервером SQL, выбрать данные, а затем закрыть соединение. Однако это не имеет смысла, когда код выполняется на самом сервере SQL! Зачем мне хотеть, чтобы код, работающий на SQL-сервере, заставлял сервер подключаться к себе?!?!

Есть ли лучшая практика для того, что я пытаюсь сделать? Могу ли я выбрать строки в своем коде, используя то же соединение, которое используется для выполнения хранимой процедуры?

1 ответ

Решение

Я нашел ответ, объясненный здесь: http://technet.microsoft.com/en-us/library/ms131053.aspx

Соединение, из которого запускается процедура CLR, называется "контекстным соединением" и используется следующим образом:

using(SqlConnection connection = new SqlConnection("context connection=true")) 
{
    connection.Open();
    // Use the connection
}

Интересно, зачем вам "открывать" связь? Я думаю, что соединение уже открыто, так как выполняется выполняемая процедура.

Также тесно связаны: http://msdn.microsoft.com/en-us/library/938d9dz2(v=vs.90).aspx

Другие вопросы по тегам