![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Можно ли выбрать в таблице записи у которых какое-либо поле NULL? [D5, D6, IB5.x, IB6.x, FireBird]
Sirus © (2004-02-21 08:06:00)Привет Мастера...
Есть такая проблемка: Нужно выбрать из таблицы все записи в которых значение какого-либо поля NULL???
P.N.P. (2004-02-22 00:02:00) [1]если заранее имя таблицы неизвестно,
то поля можно получить так
select f.rdb$field_name as
FN,f.rdb$null_flag as
N,fs.rdb$character_length as L,
f.rdb$description as FD,
t.rdb$type_name as T
from rdb$relation_fields f
left join rdb$fields fs on fs.rdb$field_name = f.rdb$field_source
left join rdb$types t on fs.rdb$field_type = t.rdb$type and (t.rdb$field_name= 'RDB$FIELD_TYPE')
where f.rdb$relation_name= 'MyTableName'
order by f.rdb$field_position
ЮЮ (2004-02-21 08:55:00) [2]1) получаешь список полей ч/з GetFieldNames
2) формируешь запрос
SELECT * FROM Table WHERE
(f1 IS NULL) AND(f2 IS NULL) AND...
который быстро выполнится и не вернёт ни одной записи (т.к. Primary Key Field(S) <> NULL)
3) Анализируя FieldDefs формируешь нужный запрос
SELECT * FROM Table WHERE
(NumericField1 IS NULL) OR(NumericField2 IS NULL) OR...
Sirus (2004-02-21 08:40:00) [3]Дело в том что мне нужно при генерировании SQL запроса знать типы полей, чтобы добавить в SQL только NUMERIC поля...
ЮЮ (2004-02-21 08:32:00) [4]Для (SomeField IS NULL) знать тип поля не обязательно. А названия полей можно получить через
TIBDatabase.GetFieldNames(const TableName: string; List: TStrings); (или подобного метода используемого Connection-а, если это не TIBDatabase).
А типы можно извлечь или из системных таблиц или даже твоим запросом
SELECT * FROM Table WHERE
(f1 IS NULL) or (f2 IS NULL) or ...
DataSet хоть и будет пуст, но его FieldDefs будут соответствовать таблице
Sirus (2004-02-21 08:16:00) [5]сформулируем вопрос по другому...
нужно выбрать список столбцов таблицы и их типы...
(потом уже можно будет сгенерить SQL)
ЮЮ (2004-02-21 08:13:00) [6]ТЩЕ это NOT
ЮЮ (2004-02-21 08:12:00) [7]WHERE (SomeField IS NULL)
и, наоборот,
WHERE ТЩЕ (SomeField IS NULL)