안녕하세요
MSSQL CLR을 이용해서 어떤 기능을 만들고 있는데요
내용은 WMI 정보를 읽어 오는 CLR프로시저인데 몇가지 항목을 루프 돌면서 가져오다 보니 속도가 너무 느려서
멀티 쓰레드를 이용해서 가져오도록 개발 중인데요
여러개의 쓰레드를 생성해서 각각 1개씩의 WMI 정보를 읽어와서
SqlContext.Pipe.SenResultRow()를 이용해서 실행결과가 한개의 테이블 형태로 보여지게 하려는데...
CLR프로시저를 실행하면
"요청한 작업을 수행하려면 SQL Server 실행 스레드가 필요합니다. 현재 스레드는 사용자 코드 또는 SQL Server가 아닌 다른 엔진 코드에서 시작했습니다."
이렇게 오류가 뜨네요
대략 CLR 코드는 아래와 같습니다.
SqlContext.Pipe.SenResultsStart(record);
foreach (string s in arrString)
{
Thread t = new Thread(() => getWMIData(s));
t.start();
}
SqlContext.Pipe.SenResultsEnd(record);
public static void getWMIData(string s)
{
...
SqlContext.Pipe.SenResultsRow(record);
}
MSSQL CLR을 이용해서 멀티 쓰레드는 사용이 안되는건가요?
* 참고로 같은 구문을 C#프로그램으로 Console.WriteLine으로 찍어보면 정상적으로 실행됩니다.
Comment 1
-
악마곰
2014.12.09 16:05
SQL 질문과 맞지 않은거 같은데요...
VS 쪽으로 알아보셔야 할겁니다.
오래전에 제 기억으로는 콘솔 과 윈폼에서 멀티스레딩은 좀 달랐던가 같네요...
저도 그것 때문에 고생했던 기억이...
오래전이라 재대로 답변을 못드려서 죄송...