Как найти таблицу в sql по имени
Перейти к содержимому

Как найти таблицу в sql по имени

  • автор:

Как найти таблицу sql

Чтобы найти таблицу в SQL, необходимо использовать команду SELECT и указать имя таблицы в качестве аргумента. Вот пример:

SELECT * FROM имя_таблицы; 

Эта команда выберет все столбцы из таблицы с указанным именем. Если таблица существует, то результатом будет набор данных из этой таблицы. Если таблица не существует, то будет выдано сообщение об ошибке.

Так же вы можете использовать команду SHOW TABLES , чтобы получить список всех таблиц в базе данных:

SHOW TABLES; 

Эта команда выведет список всех таблиц в текущей базе данных. Затем вы можете выбрать нужную таблицу с помощью команды SELECT .

Получить все таблицы в базе, в которых есть колонка с определенным названием

Есть база данных SQL Server 2008 с большим количеством таблиц. Нужно получить список всех таблиц БД, в которых есть колонка с названием Recorder_TYPE .

Отслеживать

8,667 18 18 золотых знаков 73 73 серебряных знака 181 181 бронзовый знак

задан 17 апр 2012 в 4:56

23 1 1 золотой знак 1 1 серебряный знак 3 3 бронзовых знака

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

select table_name from information_schema.columns where column_name='Recorder_TYPE' 

Отслеживать

ответ дан 17 апр 2012 в 5:25

11.5k 16 16 серебряных знаков 16 16 бронзовых знаков

select [Sch].[name] as [Schema], [Tab].[name] as [Table], [Col].[Name] as [Column] from sys.tables as [Tab] inner join sys.columns as [Col] on [Tab].[object_id] = [Col].[object_id] inner join sys.schemas as [Sch] on [Tab].[schema_id] = [Sch].[schema_id] where [Col].[Name] = 'Recorder_TYPE'; 

В предыдущем примере в результате запроса будут получены также «несуществующие» временные таблицы View.

Отслеживать

1,537 8 8 серебряных знаков 16 16 бронзовых знаков

ответ дан 24 мар 2016 в 3:02

SQL — Урок 4. Выборка данных — оператор SELECT

Итак, в нашей БД forum есть три таблицы: users (пользователи), topics (темы) и posts (сообщения). И мы хотим посмотреть, какие данные в них содержатся. Для этого в SQL существует оператор SELECT. Синтаксис его использования следующий:

SELECT что_выбрать FROM откуда_выбрать;

Вместо «что_выбрать» мы должны указать либо имя столбца, значения которого хотим увидеть, либо имена нескольких столбцов через запятую, либо символ звездочки (*), означающий выбор всех столбцов таблицы. Вместо «откуда_выбрать» следует указать имя таблицы.

Давайте сначала посмотрим все столбцы из таблицы users:

SELECT * FROM users;

Вот и все наши данные, которые мы вносили в эту таблицу. Но предположим, что мы хотим посмотреть только столбец id_user (например, в прошлом уроке, нам надо было для заполнения таблицы topics (темы) знать, какие id_user есть в таблице users). Для этого в запросе мы укажем имя этого столбца:

SELECT id_user FROM users;

Ну, а если мы захотим посмотреть, например, имена и e-mail наших пользователей, то мы перечислим интересующие столбцы через запятую:

SELECT name, email FROM users;

Аналогично, вы можете посмотреть, какие данные содержат и другие наши таблицы. Давайте посмотрим, какие у нас существуют темы:

SELECT * FROM topics;

Сейчас у нас всего 4 темы, а если их будет 100? Хотелось бы, чтобы они выводились, например, по алфавиту. Для этого в SQL существует ключевое слово ORDER BY после которого указывается имя столбца по которому будет происходить сортировка. Синтаксис следующий:

SELECT имя_столбца FROM имя_таблицы ORDER BY имя_столбца_сортировки;

По умолчанию сортировка идет по возрастанию, но это можно изменить, добавив ключевое слово DESC

Теперь наши данные отсортированы в порядке по убыванию.

Сортировку можно производить сразу по нескольким столбцам. Например, следующий запрос отсортирует данные по столбцу topic_name, и если в этом столбце будет несколько одинаковых строк, то в столбце id_author будет осуществлена сортировка по убыванию:

Сравните результат с результатом предыдущего запроса.

Очень часто нам не нужна вся информация из таблицы. Например, мы хотим узнать, какие темы были созданы пользователем sveta (id=4). Для этого в SQL есть ключевое слово WHERE, синтаксис у такого запроса следующий:

SELECT имя_столбца FROM имя_таблицы WHERE условие;

Для нашего примера условием является идентификатор пользователя, т.е. нам нужны только те строки, в столбце id_author которых стоит 4 (идентификатор пользователя sveta):

SELECT * FROM topics WHERE id_author=4;

Или мы хотим узнать, кто создал тему «велосипеды»:

Конечно, было бы удобнее, чтобы вместо id автора, выводилось его имя, но имена хранятся в другой таблице. В последующих уроках мы узнаем, как выбирать данные из нескольких таблиц. А пока узнаем, какие условия можно задавать, используя ключевое слово WHERE.

Оператор Описание
= (равно) Отбираются значения равные указанному

SELECT * FROM topics WHERE id_author=4;

SELECT * FROM topics WHERE id_author>2;

SELECT * FROM topics WHERE id_author =2;

Научись программировать на Python прямо сейчас!

  • Научись программировать на Python прямо сейчас
  • Бесплатный курс

Если этот сайт оказался вам полезен, пожалуйста, посмотрите другие наши статьи и разделы.

Быстрый поиск объектов и данных в БД SQL Server

Очень часто разработчики и администраторы БД сталкиваются с задачей поиска в базе данных всех упоминаний какого-либо объекта, столбца, переменной или поиск всех таблиц, где встречается искомое значение. Если вам приходилось решать подобную проблему, то вы знаете, что это ни самая тривиальная задача и Ctrl+F здесь не поможет.

Готового решения нет ни в SQL Server Management Studio ни в Visual Studio, вот несколько сценариев, которые вы можете использовать:

Поиск данных в таблицах и представлениях

Есть много реализаций на T-SQL поиска данных по всем таблицам с просмотром всех столбцов и это не самая оптимальная реализация, так как везде используется перебор в курсоре системных представлений.

DECLARE @SearchText varchar(200), @Table varchar(100), @TableID int, @ColumnName varchar(100), @String varchar(1000); --modify the variable, specify the text to search for SET @SearchText = 'John'; DECLARE CursorSearch CURSOR FOR SELECT name, object_id FROM sys.objects WHERE type = 'U'; --list of tables in the current database. Type = 'U' = tables(user-defined) OPEN CursorSearch; FETCH NEXT FROM CursorSearch INTO @Table, @TableID; WHILE @@FETCH_STATUS = 0 BEGIN DECLARE CursorColumns CURSOR FOR SELECT name FROM sys.columns WHERE object_id = @TableID AND system_type_id IN(167, 175, 231, 239); -- the columns that can contain textual data --167 = varchar; 175 = char; 231 = nvarchar; 239 = nchar OPEN CursorColumns; FETCH NEXT FROM CursorColumns INTO @ColumnName; WHILE @@FETCH_STATUS = 0 BEGIN SET @String = 'IF EXISTS (SELECT * FROM ' + @Table + ' WHERE ' + @ColumnName + ' LIKE ''%' + @SearchText + '%'') PRINT ''' + @Table + ', ' + @ColumnName + ''''; EXECUTE (@String); FETCH NEXT FROM CursorColumns INTO @ColumnName; END; CLOSE CursorColumns; DEALLOCATE CursorColumns; FETCH NEXT FROM CursorSearch INTO @Table, @TableID; END; CLOSE CursorSearch; DEALLOCATE CursorSearch; 

У этого решения есть много недостатков:

  • Использование курсоров, а это, как правило неэффективный код
  • Сложный запрос, который медленно работает даже на небольших базах данных
  • Поиск работает только по текстовым данным, поэтому для поиска, например, даты потребуется доработка

Поиск объектов

Поиск объектов в БД по имени или их упоминание в других объектах немного проще, чем поиск определённого текста. Есть так же несколько разных сценариев поиска, но все их объединяет одно: обращение к системным объектам.

Во всех следующих сценариях осуществляется поиск переменной @StartProductID в хранимых процедурах. Но скрипты можно использовать и для поиска в других объектах – в триггерах, функциях, столбцах и т.д.

INFORMATION_SCHEMA.ROUTINES

Системное представление INFORMATION_SCHEMA.ROUTINES позволяет найти любой параметр, встречающийся в процедурах или функциях. Колонка ROUTINE_DEFINITION содержит полный текст объекта, который был указан при его создании.

SELECT ROUTINE_NAME, ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_DEFINITION LIKE '%@StartproductID%' AND ROUTINE_TYPE='PROCEDURE' 

Результат работы запроса:

Не используйте представления INFORMATION_SCHEMA, чтобы определить схему объекта. Единственный надежный способ найти схему объекта — выполнить запрос к представлению каталога sys.objects.

Представление sys.syscomments

Содержит записи для всех представлений, правил, значений по умолчанию, триггеров, ограничений CHECK и DEFAULT, а также для всех хранимых процедур в базе данных. Столбец text содержит инструкции исходных определений SQL.

SELECT OBJECT_NAME( id ) FROM SYSCOMMENTS WHERE text LIKE '%@StartProductID%' AND OBJECTPROPERTY(id , 'IsProcedure') = 1 GROUP BY OBJECT_NAME( id ); 

Этот метод не желательно использовать, так как в будущих версиях SQL Server представление sys.syscomments будет удалено.

Представление sys.sql_modules

Содержит по одной строке для каждого объекта, являющегося модулем, определенным на языке SQL в SQL Server.

SELECT OBJECT_NAME( object_id ) FROM sys.sql_modules WHERE OBJECTPROPERTY(object_id , 'IsProcedure') = 1 AND definition LIKE '%@StartProductID%'; 

Результат такой же, как в предыдущем способе:

Другие представления информационной схемы

Запрос к представлениям sys.syscomments, sys.schemas и sys.objects. Представление sys.schemas содержит информацию обо всех схемах внутри базы данных. В представление sys.objects содержится информация обо всех объектах базы данных. Обратите внимание, что для поиска информации о триггерах необходимо просматривать отдельное представление sys.triggers.

DECLARE @searchString nvarchar( 50 ); SET@searchString = '@StartProductID'; SELECT DISTINCT s.name AS Schema_Name , O.name AS Object_Name , C.text AS Object_Definition FROM syscomments C INNER JOIN sys.objects O ON C.id = O.object_id INNER JOIN sys.schemas S ON O.schema_id = S.schema_id WHERE C.text LIKE '%' + @searchString + '%' OR O.name LIKE '%' + @searchString + '%' ORDER BY Schema_name , Object_name;

Основным недостатком данных методов поиска является то, что для поиска каждого нового типа объектов необходимо вносить в скрипты изменения. Чтобы сделать это вы должны хорошо понимать внутреннюю организацию и структуру системных объектов SQL Server. Кроме того, нужно позаботиться об обработке различных ошибок и исключений, например, связанных с поиском строк, содержащих экранирующие символы.

Если вы не являетесь опытным разработчиком, не знакомы с внутренним устройством хранения DDL информации объектов БД или предпочитаете использовать проверенное и безошибочное решение, то начните использовать ApexSQL Search.

ApexSQL Search – это надстройка (ADD-IN) для SSMS и Visual Studio, которая позволяет искать любой текст в объектах базы данных (в том числе имена объектов), данные, хранящиеся в таблицах и представлениях (даже если они зашифрованы), осуществлять повторные поиски по истории в один клик.

Для поиска данных в таблицах и представлениях:

  1. В меню SQL Server Management Studio или Visual Studio найдите ApexSQL Search
  2. Выберите вариант Database text search…:
  3. В текстовом поле поиска Search text укажите искомый текст.
  4. В раскрывающемся меню Database выберите базу данных для поиска
  5. В дереве поиска Select objects to search укажите таблицы и представления для поиска или оставьте их все выделенными
  6. С помощью флажков укажите в каких типах данных необходимо осуществить поиск (numeric, text type, uniqueidentifier, date columns), искать ли в представлениях, необходимо ли строгое совпадение и, при поиске даты, укажите её формат.
    ApexSQL Search - Database text search
  7. После нажатия кнопки Find now, вы получите сводную таблицу со списком таблиц и представлений, которые содержат искомое значение: ApexSQL Search - Database text search
  8. Нажмите кнопку с многоточием в колонке Column value, чтобы получить детали:
    ApexSQL Search - Database search details

Для поиска объектов:

  1. В меню SQL Server Management Studio или Visual Studio найдите ApexSQL Search
  2. Выберите вариант Database object search…: ApexSQL Search - Database search details
  3. В поле поиска Search text укажите искомый объект, например, имя переменной.
  4. В раскрывающемся меню Database выберите базу данных для поиска
  5. В дереве поиска Objects укажите типы объектов для поиска или оставьте их все выделенными
  6. Флажками укажите детали поиска: искать ли в именах объектов, колонок, индексов или только в самих описания объектов. Просматривать ли системные объекты, нужно ли точное совпадение, а также можно указать экранирующий символ.
  7. После этого начинаем поиск Find now:
    ApexSQL Search - Database object search В таблице будет полный список объектов, которые содержат искомое значение.
  8. При двойном щелчке по объекту в таблице Database object search, можно увидеть его ссылку в Object Explorer
    ApexSQL Search - Database object search

SQL Server Management Studio и Visual Studio не имеют встроенной возможности поиска объектов и данных в БД. Запросы, которые решают эту задачу неэффективны, медленные в работе и требуют глубоких знаний системных объектов SQL Server. Но зато с этой задачей прекрасно справляется ApexSQL Search

Related posts:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *