|
Получение имен полей из запроса
|
|||
---|---|---|---|
#18+
День добрый! Подскажите есть ли способ получить имена полей типа Имя_Таблицы.Имя_Поля для запросов типа: Select * from T и Select * from T as t Left Join T2 as t2 ON t2.id=t.id_T2 ... Left Join TN as tn ON tn.id=tk.id_T2 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2018, 13:35 |
|
Получение имен полей из запроса
|
|||
---|---|---|---|
#18+
select * - зло Выбирай нужные поля и назначай им необходимые псевдонимы ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2018, 13:51 |
|
Получение имен полей из запроса
|
|||
---|---|---|---|
#18+
Mixon, Где получить? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2018, 14:07 |
|
Получение имен полей из запроса
|
|||
---|---|---|---|
#18+
MixonДень добрый! Подскажите есть ли способ получить имена полей типа Имя_Таблицы.Имя_Поля для запросов типа: Select * from T и Select * from T as t Left Join T2 as t2 ON t2.id=t.id_T2 ... Left Join TN as tn ON tn.id=tk.id_T2 обычно за такие запросы типа: SELECT * FROM T у нас принято отправлять на доработку :) это очень плохая идея, особенно если в запросе много JOIN'ов, а 90% полей нафиг ненадо. Это может сильно замедлить запрос и в случае добавления полей поломать логику ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2018, 14:14 |
|
Получение имен полей из запроса
|
|||
---|---|---|---|
#18+
Roman Mejtesэто ... плохая идея +1 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2018, 14:25 |
|
Получение имен полей из запроса
|
|||
---|---|---|---|
#18+
Roman Mejtesобычно за такие запросы типа: SELECT * FROM T у нас принято отправлять на доработку :) это очень плохая идея, особенно если в запросе много JOIN'ов, а 90% полей нафиг ненадо. Это может сильно замедлить запрос и в случае добавления полей поломать логику И особенно, если у соединяемых таблиц есть поля с одинаковыми именами. Метаданные выборки (имена полей, их типы) получить несложно, если возврат метаданных поддерживается провайдером: DataTableReader.GetSchemaTable (если не поддерживается, вернется null), но вот какое поле результирующего набора относится к какой из соединяемых таблиц, не получить никак. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2018, 15:20 |
|
Получение имен полей из запроса
|
|||
---|---|---|---|
#18+
Сон Веры ПавловныМетаданные выборки (имена полей, их типы) получить несложно Соглашусь с тем, что за select * надо бить, но вот это не правда :) Сон Веры Павловныно вот какое поле результирующего набора относится к какой из соединяемых таблиц, не получить никак. Парсится первая строка результата запроса и получаем имена полей. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2018, 15:22 |
|
Получение имен полей из запроса
|
|||
---|---|---|---|
#18+
hVosttСон Веры ПавловныМетаданные выборки (имена полей, их типы) получить несложно Соглашусь с тем, что за select * надо бить, но вот это не правда :) Тьфу блин, прочитал «невозможно»... вот чукча. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2018, 15:23 |
|
Получение имен полей из запроса
|
|||
---|---|---|---|
#18+
hVosttПарсится первая строка результата запроса и получаем имена полей. А если в селект-листе коррелированные подзапросы? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2018, 15:28 |
|
Получение имен полей из запроса
|
|||
---|---|---|---|
#18+
Понимаю всеобщее негодование, всем спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2018, 15:39 |
|
Получение имен полей из запроса
|
|||
---|---|---|---|
#18+
Сон Веры ПавловныhVosttПарсится первая строка результата запроса и получаем имена полей. А если в селект-листе коррелированные подзапросы? Зависит от провайдера, как он на это отреагирует. Может и колонки с повторяющимися именами засунуть. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2018, 15:42 |
|
Получение имен полей из запроса
|
|||
---|---|---|---|
#18+
Microsoft® SQL Server Transact-SQL ScriptDom Копать нужно в этом направлении, но лучше не копать ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2018, 16:33 |
|
Получение имен полей из запроса
|
|||
---|---|---|---|
#18+
Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2018, 16:34 |
|
Получение имен полей из запроса
|
|||
---|---|---|---|
#18+
ну и с чего вы решили, что у ТС MS SQL Server? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2018, 16:51 |
|
Получение имен полей из запроса
|
|||
---|---|---|---|
#18+
Konst_Oneну и с чего вы решили, что у ТС MS SQL Server? Какая разница... постановка была "Имя_Таблицы.Имя_Поля" и селект со звездой... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2018, 16:59 |
|
Получение имен полей из запроса
|
|||
---|---|---|---|
#18+
buserKonst_Oneну и с чего вы решили, что у ТС MS SQL Server? Какая разница... постановка была "Имя_Таблицы.Имя_Поля" и селект со звездой... Имя таблицы в пролете. Теоретически можно распарсить запрос, получить имена таблиц, последовательно вытащить из словарных таблиц базы имена колонок, и исходя из того, что при select * сначала выводятся колонки первой таблицы, потом второй, итд. в порядке расположения колонок таблицы, сформировать алиасы. Но вот что делать, если один из участников джойна - CTE или подзапрос? Учитывая, что тип БД не указан, можно вспомнить про тот же оракл, где джойны могут быть написаны в ансишном стиле, а могут в родном оракловом (имена таблиц через запятую во from, все предикаты соединений в секции where). В общем, чем решать задачу, тянущую на написание полноценного парсера SQL, лучше немного потрудиться пальцами, и по-человечески сформировать список выбираемых полей. Это намного, на 10 порядков проще. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2018, 17:15 |
|
Получение имен полей из запроса
|
|||
---|---|---|---|
#18+
Сон Веры Павловнылучше немного потрудиться пальцамиЕсли MSSQL - можно даже не трудиться. Студия в редакторе запросов мне автоматически SELECT * заменила на имена полей для всех входящих в него таблиц ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2018, 17:34 |
|
Получение имен полей из запроса
|
|||
---|---|---|---|
#18+
Сон Веры ПавловныТеоретически можно распарсить запрос, получить имена таблиц, последовательно вытащить из словарных таблиц базы имена колонок Да не надо этого делать. Выполняешь любой запрос, потом смотришь на результат, который вернулся. Посмотри на исходники Dapper-а, который абсолютно любой запрос может вернуть как dynamic (внутри там будет IDictionary<string, object>), и никакая схема ему не нужна. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2018, 18:01 |
|
Получение имен полей из запроса
|
|||
---|---|---|---|
#18+
hVosttСон Веры ПавловныТеоретически можно распарсить запрос, получить имена таблиц, последовательно вытащить из словарных таблиц базы имена колонок Да не надо этого делать. Выполняешь любой запрос, потом смотришь на результат, который вернулся. Посмотри на исходники Dapper-а, который абсолютно любой запрос может вернуть как dynamic (внутри там будет IDictionary<string, object>), и никакая схема ему не нужна. А к какой таблице какие колонки относятся - откуда взять? У ТС в постановке задачи было Mixonполучить имена полей типа Имя_Таблицы.Имя_Поля А просто получить имена полей выборки - да, дело нехитрое, и способов для этого существует больше одного. Ну, и в случае наличия в разных соединяемых таблицах полей с одинаковыми именами будет весело (см. скриншот ниже). Если бы их не было, то к дапперовскому dynamic-результату можно было бы обращаться как-то так: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
а в случае колонок с одинаковыми именами - только вот так: Код: sql 1. 2. 3. 4. 5. 6. 7.
Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
- не позавидую тому, кому придется работать с такой кашей. В общем, явное перечисление выбираемых полей в селект-листе, и назначение алиасов для полей выборки с одинаковыми именами так, чтобы имя каждого поля в выборке было уникальным - залок отсутствия головной (и не только) боли в будущем. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 07:16 |
|
Получение имен полей из запроса
|
|||
---|---|---|---|
#18+
Сон Веры ПавловныВ общем, явное перечисление выбираемых полей в селект-листе, и назначение алиасов для полей выборки с одинаковыми именами так, чтобы имя каждого поля в выборке было уникальным - залок отсутствия головной (и не только) боли в будущем. Да, за звездочку в запросах лупашить подвернувшимся айпадом ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 10:50 |
|
|
start [/forum/search_topic.php?author=VladArk&author_mode=last_topics&do_search=1]: |
0ms |
get settings: |
11ms |
get forum list: |
12ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
78ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 446ms |
total: | 646ms |
0 / 0 |