Проверьте, существует ли таблица в SQL Server - PullRequest
994 голосов
/ 03 октября 2008

Мне бы хотелось, чтобы это было окончательное обсуждение того, как проверить, существует ли таблица в SQL Server 2000/2005 с использованием операторов SQL.

Когда вы Google для ответа, вы получаете так много разных ответов. Есть ли официальный / обратный и прямой совместимый способ сделать это?

Вот два возможных способа сделать это. Какой из двух является стандартным / лучшим способом сделать это?

Первый способ:

IF EXISTS (SELECT 1 
           FROM INFORMATION_SCHEMA.TABLES 
           WHERE TABLE_TYPE='BASE TABLE' 
           AND TABLE_NAME='mytablename') 
   SELECT 1 AS res ELSE SELECT 0 AS res;

Второй способ:

IF OBJECT_ID (N'mytablename', N'U') IS NOT NULL 
   SELECT 1 AS res ELSE SELECT 0 AS res;

MySQL обеспечивает простое

SHOW TABLES LIKE '%tablename%'; 

заявление. Я ищу что-то похожее.

Ответы [ 24 ]

0 голосов
/ 06 сентября 2017

- - создать процедуру, чтобы проверить, существует ли таблица


DELIMITER $$

DROP PROCEDURE IF EXISTS `checkIfTableExists`;

CREATE PROCEDURE checkIfTableExists(
    IN databaseName CHAR(255),
    IN tableName CHAR(255),
    OUT boolExistsOrNot CHAR(40)
)

  BEGIN
      SELECT count(*) INTO boolExistsOrNot FROM information_schema.TABLES
      WHERE (TABLE_SCHEMA = databaseName)
      AND (TABLE_NAME = tableName);
  END $$

DELIMITER ;

- - как использовать: проверить, существует ли миграция таблиц


 CALL checkIfTableExists('muDbName', 'migrations', @output);
0 голосов
/ 10 апреля 2013

считайте в одной базе данных у вас есть таблица t1. Вы хотите запустить скрипт на другой базе данных, как - если существует t1, то больше ничего не создайте t1. Для этого откройте Visual Studio и выполните следующие действия:

Щелкните правой кнопкой мыши на t1, затем выберите Script table as, затем DROP и Create To, затем New Query Editor

вы найдете желаемый запрос. Но перед выполнением этого скрипта не забудьте закомментировать оператор drop в запросе, поскольку вы не хотите создавать новый, если он уже есть.

Спасибо

0 голосов
/ 07 февраля 2014

Если кто-то пытается сделать то же самое в linq to sql (или особенно linqpad), включите опцию, чтобы включить системные таблицы и представления, и сделайте этот код:

let oSchema = sys.Schemas.FirstOrDefault(s=>s.Name==a.schema )
where oSchema !=null
let o=oSchema!=null?sys.Objects.FirstOrDefault (o => o.Name==a.item && o.Schema_id==oSchema.Schema_id):null
where o!=null

при условии, что у вас есть объект с именем в свойстве с именем item, а схема в свойстве с именем schema, где имя исходной переменной равно a

0 голосов
/ 19 августа 2014

Если это будет «окончательное» обсуждение, то следует отметить, что сценарий Ларри Леонарда может также запрашивать удаленный сервер, если серверы связаны между собой.

if exists (select * from REMOTE_SERVER.MyOtherDatabase.sys.tables where name = 'MyTable')
    print 'Exists'
...