2010-07-12 6 views
3

나는 C#으로 작성된 저장 프로 시저가 있습니다SQL Server 저장 프로 시저로 C# 함수를 변환하는 방법이 있습니까?

SqlConnection scn = new SqlConnection("context connection=true;"); 
     SqlCommand scm = new SqlCommand("Select * from EPMS_Filters",scn); 
     SqlDataAdapter sda = new SqlDataAdapter(scm); 
     DataSet ds = new DataSet(); 


     //template for select Query. 
     String SelectQry = "select convert(varchar,TimeStamp,101) as TimeStamp, avg({0} from EPMSDataTable where timestamp between '{1}' and '{2}' group by convert(varchar,timestamp,101)"; 
     String filters = ""; 

     //select clause part which contains simple columns select col1, col2... 
     sda.SelectCommand.CommandText = "Select column_name from information_schema.columns where table_name = 'EPMSDataTable' and column_name <> 'timestamp'"; 
     sda.Fill(ds, "SimpleFilters"); 
     foreach (DataRow dr in ds.Tables["SimpleFilters"].Rows) 
     { 
      String fName = dr[0].ToString(); 
      filters += dr[0] + ")as " + dr[0] + ", avg("; 
     } 

     filters = filters.TrimEnd(", avg(".ToCharArray()); //remove last ',' 

     scm.CommandText = String.Format(SelectQry,filters,start.ToString(),end.ToString()); 
     scn.Open(); 
     SqlContext.Pipe.Send(scm.ExecuteReader()); 
     scn.Close(); 

어쨌든 거기 또는 SQL 저장 프로 시저 코드에이 코드를 변환 할 수있는 몇 가지 도구를? 아니면 손으로 다시 작성해야합니까? 내가 물어 보는 이유는 예를 들어 SQL 형식으로 데이터 집합 변수를 처리하는 방법을 잘 모르겠다는 것입니다.

감사!

그렉

+0

직접 작성해야합니다. –

답변

1

직접 작성해야합니다. 너무 어렵지 않습니다. 당신의 데이터 테이블을 통해 루프를 들어

, 당신은이 같은 커서, 뭔가 그것을 대체 할 것이다 :

SET NOCOUNT ON; 

DECLARE ohno_a_cursor CURSOR FAST_FORWARD FOR 
Select column_name from information_schema.columns where table_name = 'EPMSDataTable' and column_name <> 'timestamp' 

DECLARE @colname nvarchar(max); 

OPEN ohno_a_cursor; 
FETCH NEXT FROM ohno_a_cursor INTO @colname 
WHILE @@FETCH_STATUS = 0 BEGIN 
    SET @Filters = @Filters + '(whatever'); 
END 

CLOSE ohno_a_cursor; 
DEALLOCATE ohno_a_cursor; 
1

대답은 자동화 된 프로세스는 SQL 저장 프로 시저에 그 C 번호를 설정 할 수있을 것이라고 그 가능성, no입니다.

0

Visual Studio에서 SQL 서버 프로젝트를 사용하면 저장 프로 시저에 대한 기존의 C# 코드를 변경할 수 있습니다.

기능은 [Microsoft.SqlServer.Server.SqlProcedure]

로 장식되어 있습니다 그리고 당신은 다른 반환 유형을 원하는 경우 함수 반환에만 sqlboolean 유형, 당신은 출력 매개 변수를 사용합니다.

체크 아웃 http://blog.sqlauthority.com/2008/10/19/sql-server-introduction-to-clr-simple-example-of-clr-stored-procedure/

관련 문제