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

У меня есть скрипт, который сбрасывает нагрузку таблиц с помощью DROP TABLE, если он существует, это работает.

в этом скрипте также есть delete для удаления строки из другой таблицы, которой я не управляю. Эта таблица может или не может существовать.Есть ли проверить существует таблица, прежде чем пытаться удалить строку?

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

спасибо Алекс!--1-->

8 ответов


чтобы проверить 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]';

этот удаляет строку и не жалуется, если она не может.

DELETE IGNORE FROM table WHERE id=1

здесь Источник.


IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[TABLE_NAME]') AND type in (N'U'))

для SQL Server: можно использовать:

IF OBJECT_ID('tablename','U') IS NOT NULL

Я не думаю, что вы найдете общий синтаксис между SQL server и моим SQL. Я имею в виду, вы можете проверить, если таблица exsits на SQL Server, используя что-то вроде:

if exists(select * from sys.objects where name like 'table_name')

но MySQL будет иметь свой собственный каталог.

Если вы не пишете сценарий, как:

if (sql_server) then
   if exists(select * from sys.objects where name like 'table_name')
else --mySQl
   --execute the mysql script

Мне кажется, что первый элемент в столбце "связанный" справа отвечает на ваш вопрос.... проверьте, существует ли таблица в SQL Server


Для MySQL

show tables like "test1";

для SQL Server

SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'testSchema' AND     TABLE_NAME = 'test1'

вопрос, который вы хотите задать себе (с точки зрения дизайна базы данных): почему вы пытаетесь удалить строки из таблицы, в существовании которой вы не уверены? Если это не так, но вы ожидаете, что это так, не лучше ли создать таблицу, чем не удалять ее?

в любом случае, Chris gesslers answer делает именно то, что вы спрашиваете в SQL Server, но здесь есть некоторый запах.

конструкция в MySQL вы можете использовать

SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'databasename'
AND table_name = 'tablename'

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