2010-07-12 10 views
3

J'ai une procédure stockée qui est écrit en C#:Y at-il de toute façon de convertir la fonction C# en procédure stockée SQL Server?

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(); 

Y at-il de toute façon ou d'un outil qui peut convertir ce code à un code de procédure stockée SQL? Ou dois-je le réécrire à la main? La raison pour laquelle je demande est que, par exemple, je ne suis pas sûr de savoir comment gérer la variable de jeu de données en type sql ..

Merci!

Greg

+0

vous devrez réécrire à la main. –

Répondre

1

Vous devrez le réécrire à la main. Ce n'est pas trop dur cependant.

Pour la boucle à travers votre datatable, vous devez remplacer que par un curseur, quelque chose comme ceci:

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

La réponse est non, il est peu probable que tout processus automatisé serait en mesure de transformer cette C# dans une procédure stockée SQL.

Questions connexes