有没有将C#函数转换为SQL Server存储过程的方法?

3

我有一个存储过程,它是用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 存储过程代码呢?还是说我必须手写重写它呢?

你将需要手写重新编写的内容。 - Mitch Wheat
4个回答

2

您需要手动重写它。不过,这并不太难。

对于遍历数据表的循环,您可以将其替换为游标,类似于以下内容:

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

请查看此链接,它可能对您有帮助。 http://www.atomicsql.com

它可以将C#代码转换为Mssql存储过程。

输入是包含您的C#代码的dll文件,输出是一个SQL脚本文件。

请查看帮助说明。

-- 对于此线程的管理员:请不要删除此评论。这个工具不是病毒或者会损坏您的计算机之类的东西。


2
看起来像病毒,它可能会让我变瘦并且损坏我的电脑。 - Jeremy Thompson
如果需要的话,您可以使用虚拟机环境来确保可执行文件不会在您的计算机上执行任何错误操作。 - Cristi Dumitrescu

1

答案是否定的,任何自动化过程都不太可能将那个C#转换为SQL存储过程。


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接