Есть ли способ преобразования функции c # в хранимую процедуру sql server? - PullRequest
3 голосов
/ 12 июля 2010

У меня есть хранимая процедура, написанная на 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.

Спасибо!

Грег

Ответы [ 3 ]

1 голос
/ 12 июля 2010

Вам придется переписать его вручную. Это не так уж сложно.

Для цикла через таблицу данных вы бы заменили его курсором, примерно так:

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 голос
/ 12 июля 2010

Ответ отрицательный, маловероятно, что какой-либо автоматизированный процесс сможет превратить этот C # в хранимую процедуру SQL.

0 голосов
/ 15 марта 2014

Используя SQL Server Project в Visual Studio, вы можете изменить существующий код C # на хранимую процедуру.

Функции украшены [Microsoft.SqlServer.Server.SqlProcedure]

И ваша функция возвращает только sqlboolean тип, если вы хотите другой тип возврата, вы используете выходные параметры.

Проверьте это http://blog.sqlauthority.com/2008/10/19/sql-server-introduction-to-clr-simple-example-of-clr-stored-procedure/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...