Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Выбрать все поля кроме  [new]
АвторЯ
Guest
Здравствуйте уважаемые!
Подскажите пожалуйста, как быть в такой ситуации: Есть две идентичные таблицы, вторая отличается от первой наличием двух дополнительных полей. Копирование записей из первой во вторую делается так: insert into table2 select @value1, @value2, table1.* from table1 where <условие копирования>. А вот обратно возникает загвоздка - написать запрос, выбирающий из table2 все поля, кроме двух первых?
Очень хочется применить *, т.к. помимо прочих стоит задача при возникновении расхождений в таблицах выдавать ошибку и не работать.
15 июл 09, 17:59    [7420670]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать все поля кроме  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
АвторЯ
Очень хочется


А не получится, если только на динамику не переходить.
15 июл 09, 18:02    [7420692]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать все поля кроме  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36800
Забудьте про * навсегда.
15 июл 09, 18:02    [7420694]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать все поля кроме  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
АвторЯ
стоит задача при возникновении расхождений в таблицах выдавать ошибку и не работать.
Ничего не понял
Вы же уже нашли "расхождения в таблицах" - два пропавших поля
Самое время "выдать ошибку и не работать"
15 июл 09, 18:04    [7420703]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать все поля кроме  [new]
АвторЯ
Guest
pkarklin: уже на динамике, как вы думаете имена таблиц подставляются? Необходимость перечисления полей добавляет ещё один запрос к базе и снижает скорость, не хочется.

Паганель: эти два поля - нужные, на остальные расхождения требуется ругаться и не работать.

Сергей Алексеевич, каждый инструмент служит определённой цели. Применение тех или иных инструментов определяется только решаемой задачей. Религию, пожалуйста, оставьте в стороне.
15 июл 09, 18:20    [7420802]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать все поля кроме  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
АвторЯ
на остальные расхождения требуется ругаться и не работать
Звездочка Вам тут не поможет
Потому что возможен случай, когда "поменяны" местами два поля, тип данных которых одинаков
Например, customers_count int и orders_count int
И не отследите Вы такое "расхождение" звездочкой никак
15 июл 09, 18:25    [7420820]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать все поля кроме  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Гавриленко Сергей Алексеевич
Забудьте про * навсегда.
Кроме
EXISTS(SELECT * ...)
15 июл 09, 19:57    [7421125]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать все поля кроме  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36800
АвторЯ
Сергей Алексеевич, каждый инструмент служит определённой цели. Применение тех или иных инструментов определяется только решаемой задачей. Религию, пожалуйста, оставьте в стороне.
Это не религия. Это практика. Использование * в промышленных масштабах вместо списка полей при инсертах и селектах еще никого до добра не доводило. Только порождало дурацкие проблемы типа "как вставить поле в середину таблицы" и т.д. и т.п.
15 июл 09, 23:40    [7421516]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать все поля кроме  [new]
Jaffar
Member

Откуда:
Сообщений: 633
iap
Гавриленко Сергей Алексеевич
Забудьте про * навсегда.
Кроме
EXISTS(SELECT * ...)



так писать не стоит
лучше exists(select 1 from .....) ибо 2000 sql - делает тупо запрос такой как в скобках и возвращает всю кучу которая совсем не нужна.
16 июл 09, 10:45    [7422288]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать все поля кроме  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Jaffar
ибо 2000 sql - делает тупо запрос такой как в скобках и возвращает всю кучу которая совсем не нужна.
И это подтверждается операцией плана...
А какой, собственно, операцией плана это подтверждается, можете продемонстрировать?
16 июл 09, 10:47    [7422306]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать все поля кроме  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
Jaffar
так писать не стоит
лучше exists(select 1 from .....) ибо 2000 sql - делает тупо запрос такой как в скобках и возвращает всю кучу которая совсем не нужна.


В запросе с EXISTS \ NOT EXISTS все равно, что будет написано в перечне выборки. Сервер не будет производить реальной выборки, а будет просто проверять наличие \ отсутствие записи.
16 июл 09, 10:55    [7422368]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать все поля кроме  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
pkarklin
Jaffar
так писать не стоит
лучше exists(select 1 from .....) ибо 2000 sql - делает тупо запрос такой как в скобках и возвращает всю кучу которая совсем не нужна.


В запросе с EXISTS \ NOT EXISTS все равно, что будет написано в перечне выборки. Сервер не будет производить реальной выборки, а будет просто проверять наличие \ отсутствие записи.
Если в выражении SELECTа нет ничего, соответствующего возможному имени поля.
В этом случае сервер будет проверять наличие этого поля в таблице
16 июл 09, 11:06    [7422461]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать все поля кроме  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Jaffar
iap
Гавриленко Сергей Алексеевич
Забудьте про * навсегда.
Кроме
EXISTS(SELECT * ...)



так писать не стоит
Так писать не только стоит, но и общепринято.
16 июл 09, 11:07    [7422476]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать все поля кроме  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
iap
Jaffar
iap
Гавриленко Сергей Алексеевич
Забудьте про * навсегда.
Кроме
EXISTS(SELECT * ...)



так писать не стоит
Так писать не только стоит, но и общепринято.

позволю с Вами не согласиться ,насчет общепринято
16 июл 09, 11:19    [7422573]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать все поля кроме  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
Maxx
позволю с Вами не согласиться ,насчет общепринято


BOL:

The select list of a subquery introduced by EXISTS almost always consists of an asterisk (*). There is no reason to list column names because you are just testing whether rows that meet the conditions specified in the subquery exist.
16 июл 09, 11:22    [7422606]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать все поля кроме  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
лано спорить о стиле написания запросов я не буду, я вообще говорил просто стилистику,а не про смысловую нагрузку.

Про ,то что разницы нет писать 1 или * ,мы уже 2 недели назад где-то здесь обсуждали.
-------------------------------------
Jedem Das Seine
16 июл 09, 11:25    [7422627]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить