Подтвердить что ты не робот

Удалить строку, если существует таблица SQL

У меня есть script, который снижает нагрузку на таблицы, используя DROP TABLE IF EXISTS, это работает.

В этом script есть удаление, чтобы УДАЛИТЬ строку из другой таблицы, которой я не управляю. Эта таблица может быть или не существовать. Есть ли какая-либо проверка таблицы, прежде чем пытаться удалить строку?

это должно работать для MYSQL и SQLServer

спасибо Alex

4b9b3361

Ответ 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

Ответ 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'

и проверить результаты