Skip to content

Instantly share code, notes, and snippets.

@devitfro
Created March 4, 2025 21:34
Show Gist options
  • Save devitfro/aabe87100a322332584faf04926e81d7 to your computer and use it in GitHub Desktop.
Save devitfro/aabe87100a322332584faf04926e81d7 to your computer and use it in GitHub Desktop.
-- 1. Написать функцию, которая покажет список всех пользовательских баз данных SQL Server, и их общие размеры в байтах
CREATE FUNCTION GetUserDBSize()
RETURNS TABLE
AS RETURN (
SELECT
name AS DatabaseName,
SUM(size * 8 * 1024) AS TotalSizeBytes
FROM sys.master_files
WHERE type IN (0)
AND database_id > 4
GROUP BY name
)
SELECT * FROM GetUserDBSize()
-- 2. Написать функцию, которая покажет список всех таблиц базы данных, название которой передано как параметр,
-- количество записей в каждой из её таблиц, и общий размер каждой таблицы в байтах
CREATE FUNCTION GetConnectedCount()
RETURNS INT
AS BEGIN
DECLARE @UserCount INT
SELECT @UserCount = COUNT(*)
FROM sys.dm_exec_sessions
WHERE is_user_process = 1;
RETURN @UserCount
END
-- 3. Написать функцию, которая покажет список всех полей определённой таблицы, имя которой передаётся как параметр. Если есть
-- несколько одноимённых таблиц (в разных БД) - показать информацию по каждой таблице. Кроме названия поля указать его тип,
-- поддержку нулевых значений и перечень всех ограничений
CREATE FUNCTION GetTableColumn(@TableName NVARCHAR(255))
RETURNS TABLE
AS RETURN
(
SELECT
t.TABLE_CATALOG AS database_name,
t.TABLE_SCHEMA AS schema_name,
t.TABLE_NAME AS table_name,
c.COLUMN_NAME AS column_name,
c.DATA_TYPE AS data_type,
c.IS_NULLABLE AS is_nullable,
STRING_AGG(CONSTRAINT_TYPE, ', ') AS constraints
FROM INFORMATION_SCHEMA.COLUMNS c
LEFT JOIN INFORMATION_SCHEMA.TABLES t ON c.TABLE_NAME = t.TABLE_NAME
AND c.TABLE_SCHEMA = t.TABLE_SCHEMA
LEFT JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE kcu ON c.COLUMN_NAME = kcu.COLUMN_NAME
AND c.TABLE_NAME = kcu.TABLE_NAME
AND c.TABLE_SCHEMA = kcu.TABLE_SCHEMA
LEFT JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc ON kcu.CONSTRAINT_NAME = tc.CONSTRAINT_NAME
AND kcu.TABLE_NAME = tc.TABLE_NAME
WHERE c.TABLE_NAME = @TableName
GROUP BY t.TABLE_CATALOG, t.TABLE_SCHEMA, t.TABLE_NAME, c.COLUMN_NAME, c.DATA_TYPE, c.IS_NULLABLE
)
SELECT * FROM GetTableColumn('Category')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment