Консультация № 60162
25.10.2006, 19:39
0.00 руб.
0 8 6
Добрый день.
Можно ли как-то проверить есть ли в базе данных таблица с определённым именем?
Нужно создать таблицу в БД, но только в том случае, если такой таблицы ещё нет.

Обсуждение

Неизвестный
25.10.2006, 19:57
общий
Уточните какая у вас СУБД.В разных СУБД это делается по-разному.В общем случае можно попытаться создать таблицу. Если она не создастся - значит уже есть.
Неизвестный
25.10.2006, 20:00
общий
это ответ
Здравствуйте, Вiктор!
Подход зависит от базы данных. Например, для Oracle можно обратиться к справочнику таблиц USER_TABLES или обработать ошибку ORA-942. В MySQL попытка обращения к несуществующей таблице вызовет исключение 1146 - его также можно обработать и создать нужную таблицу.
Неизвестный
25.10.2006, 20:01
общий
это ответ
Здравствуйте, Вiктор!

В приложении пример из рабочей программы. Связь с базой через DAO. Вместо QueryDefs ( коллекция запросов ) нужно поставить TableDefs (коллекция таблиц ) и метод CreateQueryDef заменить на CreateTableDef с соответствующими параметрами.
Если нет вопросов по созданию таблицы, то все.

С уважением.


Приложение:
For i = 1 To dbf.QueryDefs.Count If dbf.QueryDefs(i - 1).Name = "tt" Then b1 = True Next If b1 Then Set qu = dbf.OpenQueryDef("tt") Else Set qu = dbf.CreateQueryDef("tt", "select * from base") End If
Неизвестный
25.10.2006, 20:35
общий
это ответ
Здравствуйте, Вiктор!

Все зависит от типа СУБД.
Как правило есть системные таблицы описывающие архитектуру БД, соответственно есть таблица, которая содержит перечень таблиц и их полей.
К этим таблицам можно сделать запрос.
В Firebird эта таблица называется rdb$relations, а в ней поле rdb$relations_name в котором имена таблиц
Неизвестный
25.10.2006, 20:49
общий
это ответ
Здравствуйте, Вiктор!
Если вы имеете дело с SQL Server 2000, то это можно проверить с помощью вот такого запроса:
SELECT count(*)
FROM sysobjects
WHERE (name = ‘имя вашей таблицы‘)
Этот запрос вернет 1 если такая таблица уже в вашей БД есть, и 0 - если такой таблицы нет.
В Oracle это делается вот так:
входите в SQL Plus в качестве пользователя с правами доступа к этой таблице и вводите:
select count(*) from cat where table_name = ‘имя вашей таблицы‘;

Удачи!
Неизвестный
25.10.2006, 21:03
общий
это ответ
Здравствуйте, Вiктор!
Как всегда соригинальничаю. Хотя то что я сейчас скажу, несмотря на свою дикость, работает. Проверялось только на MySQL. Итак, код:

SELECT * from table where (1=0)

Если выполнится без проблем, значит таблица table существует, в противном случае её нет. Я сам когда прочитал об этом в интернете был поражён (как может 1 равняться нулю??). Но тем не менее факт остаётся фактом - всё прекрасно работает.
Неизвестный
25.10.2006, 22:09
общий
СУБД MySQL. Спасибо, достаточно большое количество ответов, буду разбираться.
Неизвестный
26.10.2006, 05:36
общий
это ответ
Здравствуйте, Вiктор!
Мне отвечать проще, я знаю вашу СУБД...
В MySQL 3.23 и выше, Вы можете использовать IF NOT EXISTS так, что если таблица с таким именем уже существует - ошибки не возникнет(структура имеющейся таблицы не проверяется и не обновляется!!!).
например:

CREATE TABLE IF NOT EXISTS `users` (`id` INT(11), `name` VARCHAR(32));
INSERT INTO `users` ...
чтобы быть увереным также и в структуре таблицы, можно сначала безопасно удалять таблицу, потом создавать:

DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (`id` INT(11), `name` VARCHAR(32));
INSERT INTO `users` ...

Успехов.
Форма ответа