Удалить строку, если существует таблица SQL
У меня есть script, который снижает нагрузку на таблицы, используя DROP TABLE IF EXISTS, это работает.
В этом script есть удаление, чтобы УДАЛИТЬ строку из другой таблицы, которой я не управляю. Эта таблица может быть или не существовать. Есть ли какая-либо проверка таблицы, прежде чем пытаться удалить строку?
это должно работать для MYSQL и SQLServer
спасибо
Alex
Ответы
Ответ 1
Чтобы проверить SQL SERVER,
IF (EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'TheSchema' AND TABLE_NAME = 'TheTable'))
BEGIN
--Do Stuff
END
Чтобы проверить mysql:
Вы просто считаете:
SELECT COUNT(*)
FROM information_schema.tables
WHERE table_schema = '[database name]'
AND table_name = '[table name]';
Ответ 2
Этот удаляет строку и не жалуется, если она не может.
DELETE IGNORE FROM table WHERE id=1
здесь.
Ответ 3
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[TABLE_NAME]') AND type in (N'U'))
Ответ 4
Для SQL Server: вы можете использовать:
IF OBJECT_ID('tablename','U') IS NOT NULL
Ответ 5
Я не думаю, что вы найдете общий синтаксис между SQL-сервером и моим SQL. Я имею в виду, вы можете проверить, существует ли таблица на SQL Server, используя что-то вроде:
if exists(select * from sys.objects where name like 'table_name')
но mySql будет иметь свой собственный каталог.
Если вы не напишите script как:
if (sql_server) then
if exists(select * from sys.objects where name like 'table_name')
else --mySQl
--execute the mysql script
Ответ 6
Мне кажется, что первый элемент в столбце "Связанный" с правой стороны отвечает на ваш вопрос.... Проверить, существует ли таблица в SQL Server
Ответ 7
Для MySQL
show tables like "test1";
Для SQL Server
SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'testSchema' AND TABLE_NAME = 'test1'
Ответ 8
Вопрос, который вы хотите задать себе (с точки зрения дизайна базы данных): Почему вы пытаетесь удалить строки из таблицы, которую вы не уверены? Если это не так, но вы ожидаете, что это произойдет, разве вы скорее не создадите таблицу, чем удалите ее?
В любом случае, ответ Криса Гесслера отвечает именно тому, что вы спрашиваете на SQL Server, но здесь есть какой-то запах.
Конструкция в MySQL, которую вы можете использовать, -
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'databasename'
AND table_name = 'tablename'
и проверить результаты