2013-09-03 2 views
0

После Приведен пример я нашел в интернете, я написал код следующий C#, который реализует хранимые процедуры CLR в MS SQL Server 2008:Как выбрать строки внутри хранимой процедуры 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