Как выбрать строки внутри хранимой процедуры 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