Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Определение поля в запросе T-SQL  [new]
Eugine
Member

Откуда:
Сообщений: 88
Существует конструкция типа
if есть поле такое-то в табл. такой-то
то запрос этого поля
else
if есть это поле в другой табл. такой-то
то запрос этого поля

Определяющая наличие поля в одной из 2-х таблиц
так вот, загвоздка в том что SQL считает запрос не верным, т. к. в одном из запросов соответсвенно поле отсутсвует
Как-нибудь можно отключить возможность определения поля из запроса?
8 сен 04, 09:17    [941893]     Ответить | Цитировать Сообщить модератору
 Re: Определение поля в запросе T-SQL  [new]
AFire
Member

Откуда: UFA
Сообщений: 195
А вы наличие поля как проверяете?
если через information_schema.columns, то все работает
8 сен 04, 09:23    [941915]     Ответить | Цитировать Сообщить модератору
 Re: Определение поля в запросе T-SQL  [new]
leaf
Member [заблокирован]

Откуда: Ростов-на-Дону --> Москва
Сообщений: 2661
а как вы определяете наличие поля в таблице
8 сен 04, 09:23    [941918]     Ответить | Цитировать Сообщить модератору
 Re: Определение поля в запросе T-SQL  [new]
PokeMan
Member

Откуда: MOSKAU
Сообщений: 312
Если требования по производительности не высоки, то можно скрипт собрать.
...
Или если полей конечное число, то можно просто произвести их перебор, тока при таком варианте писанины гораздо больше.
8 сен 04, 09:25    [941921]     Ответить | Цитировать Сообщить модератору
 Re: Определение поля в запросе T-SQL  [new]
buser
Member

Откуда: Санкт-Петербург
Сообщений: 4537
А что Вы пытаетесь сделать...?
8 сен 04, 09:29    [941929]     Ответить | Цитировать Сообщить модератору
 Re: Определение поля в запросе T-SQL  [new]
Eugine
Member

Откуда:
Сообщений: 88
Именно так и проверяю
if (
select syscolumns.[ID] from sysobjects, syscolumns where 
sysobjects.[ID] = syscolumns.[ID] and 
sysobjects.name = 'MyTable1' and syscolumns.name= 'MyColumn') <> 0 
begin
.........
end 
else if (
select syscolumns.[ID] from sysobjects, syscolumns where 
sysobjects.[ID] = syscolumns.[ID] and 
sysobjects.name = 'MyTable2' and syscolumns.name= 'MyColumn') <> 0 
 begin
-------------
 end
причем в первом случае таблица 1 отсутсвует, а во втором, присутвуют обе.
так что, во втором случае запрос не отрабатывает
8 сен 04, 09:30    [941931]     Ответить | Цитировать Сообщить модератору
 Re: Определение поля в запросе T-SQL  [new]
_bob
Member

Откуда: Москва
Сообщений: 1654
а чем динамический SQL не подошёл?
8 сен 04, 09:41    [941966]     Ответить | Цитировать Сообщить модератору
 Re: Определение поля в запросе T-SQL  [new]
Eugine
Member

Откуда:
Сообщений: 88
Проблема в том, что существуют
разные версии одной и той же БД, соответсвенно и структуры видоизмененны
причем нужно работать с обеими версиями БД
Для этого я определяю в какой из таблиц находится поле MyColumn, что бы выполнит запрос типа select MyColumn from Table1 (Table2)
8 сен 04, 10:13    [942083]     Ответить | Цитировать Сообщить модератору
 Re: Определение поля в запросе T-SQL  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
завести 2 процедуры и вызывать их.


для спящего время бодрствования равносильно сну
8 сен 04, 10:17    [942103]     Ответить | Цитировать Сообщить модератору
 Re: Определение поля в запросе T-SQL  [new]
buser
Member

Откуда: Санкт-Петербург
Сообщений: 4537
Лучше попытаться согласовать эти структуры.... или дальше будет токмо хуже...
8 сен 04, 10:35    [942186]     Ответить | Цитировать Сообщить модератору
 Re: Определение поля в запросе T-SQL  [new]
Glory
Member

Откуда:
Сообщений: 104760
так что, во втором случае запрос не отрабатывает
Это наверное сопровождается сообщением об ошибке ?
8 сен 04, 10:40    [942213]     Ответить | Цитировать Сообщить модератору
 Re: Определение поля в запросе T-SQL  [new]
Eugine
Member

Откуда:
Сообщений: 88
Именно, ошибка нахождения поля
Server: Msg 207, Level 16, State 3, Line 29
Invalid column name 'price'.

Вообще я заметил такую особенность, если запрашиваемой таблицы не существует то с условием запрос выполняется, но если такая таблица есть, то обязательно проверяет запрашиваемое поле
вообще появилась мысль запихать запросы в строковые переменные и вызывать на выполнение запроса, только пока не знаю как реализовать :))
8 сен 04, 10:58    [942307]     Ответить | Цитировать Сообщить модератору
 Re: Определение поля в запросе T-SQL  [new]
Glory
Member

Откуда:
Сообщений: 104760
Вообще я заметил такую особенность, если запрашиваемой таблицы не существует то с условием запрос выполняется, но если такая таблица есть, то обязательно проверяет запрашиваемое поле
А версия сервера то у вас какая ?
8 сен 04, 11:04    [942344]     Ответить | Цитировать Сообщить модератору
 Re: Определение поля в запросе T-SQL  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
Eugine
вообще появилась мысль запихать запросы в строковые переменные и вызывать на выполнение запроса

Свежо. Особенно если посмотреть, сколькими топиками выше _bob спросил:

_bob
а чем динамический SQL не подошёл?
8 сен 04, 11:19    [942436]     Ответить | Цитировать Сообщить модератору
 Re: Определение поля в запросе T-SQL  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
Имхо, постановка задачи - полный бред. Ну ладно, путем долгого геморроя вы сумеете переписать запросы так, что приложения от обеих версий сумеют читать данные из разных таблиц, но якобы одинаковые.

Следующими будут вопросы:
1. Что делать с ХП, которые в разных версиях рассчитаны на работу с разными данными и разной структурой базы?
2. С триггерами (то же самое)?
3. Каким образом вести ИЗМЕНЕНИЯ в данных (а не только чтение), если, грубо говоря, кнопка на вашем клиенте "создать объект такой-то" или "изменить объект такой-то" (будь то создание накладной или изменение свойств бетономешалки), так вот эта кнопка должна заносить данные не то в первую таблицу, не то во вторую? Или вы планируете пихать и туда и туда для пущей совместимости?

Это невозможно реализовать, я вас уверяю. Либо это будет такая реализация, что через некоторое время вам захочется повеситься.

Лучше посмотрите в сторону миграции с одной версии базы на другую. Перенос данных организовать куда проще и надежнее, чем поддержку какой-то бредовой совместимости.
8 сен 04, 11:28    [942485]     Ответить | Цитировать Сообщить модератору
 Re: Определение поля в запросе T-SQL  [new]
Glory
Member

Откуда:
Сообщений: 104760
2Eugine
Сделали бы ОДНО представление либо на основе одной таблицы либо другой.
И не мучались бы при составлении процедур. Имхо.
8 сен 04, 11:42    [942565]     Ответить | Цитировать Сообщить модератору
 Re: Определение поля в запросе T-SQL  [new]
Eugine
Member

Откуда:
Сообщений: 88
GreenSunrise
Eugine
вообще появилась мысль запихать запросы в строковые переменные и вызывать на выполнение запроса

Свежо. Особенно если посмотреть, сколькими топиками выше _bob спросил:

_bob
а чем динамический SQL не подошёл?

sorry, не заметил
P.S. на счет разных версий, имелись в виду не версии SQL Server а самой структуры БД
Реализовал через динамический запрос
Всем спасибо за помощь, тема, думаю исчерпана.
8 сен 04, 11:55    [942640]     Ответить | Цитировать Сообщить модератору
 Re: Определение поля в запросе T-SQL  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
Да ежу понятно, что версии самой базы... Про то и разговор.
8 сен 04, 11:56    [942647]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить