Имена таблиц Хранимой процедуры Соединителя MySQL / ЧИСТЫЕ имена таблиц Хранимой процедуры

Когда я использую Соединитель MySQL/ЧИСТЫЙ в моем заявлении C#, и я называю хранимую процедуру с ним, используя ExecuteReader метод и Протяженность на DataTable, чтобы заполнить его. Вот код:

            using (IDataReader reader = db.ExecuteReader(cmd))
            {
                DataTable dt;
                while (!reader.IsClosed)
                {
                    dt = new DataTable();
                    Extensions.Fill(dt, reader, true);
                    ds.Tables.Add(dt);
                } if(!reader.IsClosed) reader.NextResult();
            }

И протяженность:

public static class Extensions
{
    #region Extensions
    public static void Fill(this DataTable table, IDataReader reader, bool createColumns)
    {
        if (createColumns)
        {
            table.Columns.Clear();
            var schemaTable = reader.GetSchemaTable();
            foreach (DataRowView row in schemaTable.DefaultView)
            {
                var columnName = (string)row["ColumnName"];
                var type = (Type)row["DataType"];
                table.Columns.Add(columnName, type);
            }
        }
        table.Load(reader);
    }

    #endregion

Проблема с этим кодом, если вы выбираете дважды из того же самого имени таблицы, вы не знаете, какое имя это входит в набор данных (problably ошибка, потому что то же самое имя таблицы используется дважды. Например, хранимая процедура:

CREATE PROCEDURE `test`.`mytestproc` ()
BEGIN
    SELECT NOW() FROM DUAL;
    SELECT NOW() FROM DUAL;
END

Протяженность будет problably видеть то же самое имя таблицы ('ДВОЙНОЕ') дважды. Я wan't, чтобы намекнуть в моей процедуре, каково имя таблицы, я попробовал следующее:

CREATE PROCEDURE `test`.`mytestproc` ()
BEGIN
    SELECT * FROM (SELECT NOW() FROM DUAL) a;
    SELECT * FROM (SELECT NOW() FROM DUAL) b;
END

Но это не работает. Есть ли работа для этого?

0
nl ja de
В вашей процедуре имена таблиц произвольны. Попытайтесь использовать количество набора результатов (читатель. NextResult ()), чтобы назвать столы в коде c#; например: table1 , table2 ...
добавлено автор Devart, источник
Это бросает ошибку.
добавлено автор Devart, источник
Что относительно ИЗБРАННОГО ТЕПЕРЬ() ОТ ДВОЙНОГО a; ВЫБЕРИТЕ ТЕПЕРЬ() ОТ ДВОЙНОГО b;
добавлено автор OMG, источник
Это isn' t действительно хорошее решение я думаю. Если я должен соединить пользовательский стол с двумя другими столами, таким образом, у меня есть два набора результатов. I' ll получают user1 и user2. В моей процедуре я хочу намекнуть имя таблицы, таким образом, I' m уверенный то, что называет его, добирается. Если это возможно, конечно,
добавлено автор Michiel van Vaardegem, источник
@OMG С ' normal' столы, этот doesn' t работают также. Я все еще получаю само имя таблицы
добавлено автор Michiel van Vaardegem, источник
DBA - русскоговорящее сообщество
DBA - русскоговорящее сообщество
1 345 участник(ов)

Общаемся и обсуждаем темы, посвященные DBA, PostgreSQL, Redis, MongoDB, MySQL, neo4j, riak и т.д. См. также: @devops_ru, @kubernetes_ru, @docker_ru, @nodejs_ru Рекомендуем сразу отключить уведомления, чтобы пребывание здесь было полезным и комфортным.

MySQL
MySQL
995 участник(ов)

The group is about MySQL. For code use hastebin.com. Admin: @smlkw