Published on

December 17, 2014

Изучение системных представлений и функций SQL Server

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

Как получить список таблиц в базе данных?

Чтобы получить список таблиц в базе данных, вы можете использовать представление INFORMATION_SCHEMA.TABLES или представление sysobjects. Вот два варианта:

Вариант 1:

SELECT * FROM INFORMATION_SCHEMA.TABLES

Вариант 2:

SELECT * FROM sysobjects WHERE xtype = 'U'

Представление INFORMATION_SCHEMA.TABLES рекомендуется, так как оно предоставляет последовательную структуру, которая меньше всего подвержена изменениям в будущих версиях SQL Server. Представление sysobjects содержит ценную информацию о различных объектах базы данных, включая таблицы.

Как получить список представлений в базе данных?

Аналогично получению списка таблиц, вы можете использовать представление INFORMATION_SCHEMA.VIEWS или представление sysobjects для получения списка представлений в базе данных. Вот два варианта:

Вариант 1:

SELECT * FROM INFORMATION_SCHEMA.VIEWS

Вариант 2:

SELECT * FROM sysobjects WHERE xtype = 'V'

Представление INFORMATION_SCHEMA.VIEWS предоставляет информацию, специфическую для представлений, в то время как представление sysobjects содержит информацию о различных объектах базы данных, включая представления.

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

Чтобы получить список процедур в базе данных, вы можете использовать представление INFORMATION_SCHEMA.ROUTINES или представление sysobjects. Вот два варианта:

Вариант 1:

SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE routine_type = 'PROCEDURE'

Вариант 2:

SELECT * FROM sysobjects WHERE xtype = 'P'

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

Как получить дату создания конкретной таблицы?

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

SELECT crdate FROM sysobjects WHERE xtype = 'U' AND name = 'YourTableName'

Столбец crdate представляет дату создания, а представление sysobjects содержит информацию о таблицах, представлениях, хранимых процедурах и функциях.

Как получить список всех таблиц во всех базах данных?

Хранимая процедура sp_MSforeachdb является удобным инструментом для работы со всеми базами данных. Хотя она не официально документирована, ее можно использовать для выполнения запроса в каждой базе данных. Вот пример:

DECLARE @cmd VARCHAR(8000)
SELECT @cmd = 'USE ? SELECT ''?'', name FROM sysobjects WHERE xtype = ''U'''
EXEC sp_MSforeachdb @cmd

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

Как найти таблицу во всех базах данных?

Если вам нужно найти таблицу в нескольких базах данных, вы можете использовать хранимую процедуру sp_MSforeachdb вместе с представлением sysobjects. Вот пример:

DECLARE @cmd VARCHAR(8000)
SELECT @cmd = 'USE ? SELECT ''?'', name FROM sysobjects WHERE xtype = ''U'' AND name = ''YourTableName'''
EXEC sp_MSforeachdb @cmd

В этом примере замените YourTableName на имя таблицы, которую вы ищете. Запрос будет отображать базу данных и таблицу, если она существует.

Как получить список и код хранимых процедур?

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

SELECT name, [text] FROM sysobjects o INNER JOIN syscomments c ON o.id = c.id WHERE xtype = 'P'

Представление sysobjects содержит имена хранимых процедур, а представление syscomments содержит код. Этот запрос особенно полезен для поиска конкретных слов или фраз в нескольких хранимых процедурах одновременно.

Как получить дату создания конкретного пользователя базы данных?

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

SELECT createdate FROM sys.sysusers WHERE name = 'YourUserName'

Замените YourUserName на имя интересующего вас пользователя. Представление sys.sysusers содержит полезную информацию, связанную с пользователями в базе данных.

Как получить дату создания конкретного логина SQL Server?

Чтобы получить дату создания конкретного логина SQL Server, вы можете использовать представление sys.syslogins. Вот пример:

SELECT * FROM sys.syslogins WHERE name = 'YourLoginName'

Замените YourLoginName на имя логина, для которого вы хотите получить информацию. Представление sys.syslogins содержит информацию о логинах SQL Server.

Как получить логин и пользователя, связанных во всех базах данных?

Чтобы получить информацию о логине и пользователе, связанном с ним, во всех базах данных, вы можете использовать представления sys.database_principals и sys.server_principals. Вот пример:

DECLARE @cmd VARCHAR(8000)
SELECT @cmd = 'SELECT ''?'', login_name = sp.name, user_name = dp.name FROM ?.sys.database_principals AS dp INNER JOIN sys.server_principals AS sp ON dp.[sid] = sp.[sid]'
EXEC sp_MSforeachdb @cmd

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

Как определить фрагментацию конкретной таблицы?

Чтобы определить фрагментацию в таблице, вы можете использовать функцию sys.dm_db_index_physical_stats. Столбец avg_fragmentation_in_percent указывает уровень фрагментации. Вот пример:

DECLARE @db_id SMALLINT;
DECLARE @object_id INT;
SET @db_id = DB_ID(N'YourDatabaseName');
SET @object_id = OBJECT_ID(N'YourTableName');
SELECT avg_fragmentation_in_percent FROM sys.dm_db_index_physical_stats(@db_id, @object_id, NULL, NULL, 'LIMITED');

Замените YourDatabaseName на имя вашей базы данных, а YourTableName на имя таблицы, которую вы хотите проверить. Если процент фрагментации превышает 30%, рекомендуется перестроить индекс. Если он ниже, вы можете переорганизовать индекс.

Как получить информацию о сеансах SQL Server?

Представление sys.dm_exec_sessions предоставляет ценную информацию о сеансах SQL Server, включая время начала, время окончания, имя входа, NT-домен и используемую программу. Вот пример:

SELECT * FROM sys.dm_exec_sessions

Это представление может быть полезно для мониторинга и анализа информации, связанной с сеансами.

Как получить информацию о дате создания резервной копии?

Чтобы получить информацию о дате создания резервной копии базы данных, вы можете запросить таблицу backupset в базе данных msdb. Вот пример:

SELECT [backup_start_date], [backup_finish_date] FROM [msdb].[dbo].[backupset]

Этот запрос будет отображать даты начала и окончания резервных копий.

Как получить информацию о размере и местоположении резервной копии?

Чтобы получить информацию о размере и местоположении файла резервной копии, вы можете запросить системную таблицу backupfile в базе данных msdb. Вот пример:

SELECT [file_size] / 1024 / 1024 as Size_in_MB, [physical_name] FROM [msdb].[dbo].[backupfile]

Этот запрос будет отображать размер резервных копий в мегабайтах и путь, где они находятся. Размер файла file_size хранится в байтах, поэтому его необходимо преобразовать в мегабайты.

Как получить информацию о дате создания и дате изменения задания SQL Server?

Чтобы получить информацию о дате создания и дате изменения задания SQL Server, вы можете запросить таблицу sysjobs в базе данных msdb. Вот пример:

SELECT [date_created], [date_modified] FROM [msdb].[dbo].[sysjobs]

Эту информацию также можно получить с помощью хранимой процедуры sp_help_job.

Заключение

Системные представления, таблицы и функции в SQL Server предоставляют ценную информацию о базе данных, позволяя нам отслеживать изменения и измерять производительность. Используя эти мощные инструменты, мы можем эффективно решать общие вопросы и решать реальные проблемы.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.