Skip to content

Instantly share code, notes, and snippets.

@ViktorLychkatyi
Created March 20, 2025 18:20
Show Gist options
  • Save ViktorLychkatyi/71ec757ffa0ccfe55967d9977488cb06 to your computer and use it in GitHub Desktop.
Save ViktorLychkatyi/71ec757ffa0ccfe55967d9977488cb06 to your computer and use it in GitHub Desktop.
Functions
--USER DEFINED FUNCTIONS (любые три из 4):
--1. Написать функцию, которая покажет список всех пользовательских баз данных SQL Server, и их общие размеры в байтах
CREATE FUNCTION TotalBDSize()
RETURNS TABLE
AS RETURN (
SELECT
name AS "базы данных",
SUM(size * 8) AS "размер в байтах"
FROM sys.master_files
GROUP BY name)
SELECT * FROM TotalBDSize()
--2. Написать функцию, которая покажет список всех таблиц базы данных, название которой передано как параметр, количество записей в каждой из её таблиц, и общий размер каждой таблицы в байтах
CREATE FUNCTION TableDetails()
RETURNS TABLE
AS RETURN (
SELECT
t.name AS "таблица",
SUM(p.rows) AS "количество записей",
SUM(a.total_pages * 8) AS "размер в байтах"
FROM sys.tables AS t
JOIN sys.partitions AS p ON t.object_id = p.object_id
JOIN sys.allocation_units AS a ON p.partition_id = a.container_id
WHERE p.index_id IN (0, 1)
GROUP BY t.name)
SELECT * FROM TableDetails()
--3. Написать функцию, которая покажет список всех полей определённой таблицы, имя которой передаётся как параметр. Если есть несколько одноимённых таблиц (в разных БД) - показать информацию по каждой таблице. Кроме названия поля указать его тип, поддержку нулевых значений и перечень всех ограничений
--4. Написать пользовательскую функцию, которая покажет количество присоединённых к серверу пользователей
CREATE FUNCTION UserstoServer()
RETURNS INT
AS BEGIN
DECLARE @user_count INT
SELECT @user_count = COUNT(DISTINCT login_name)
FROM sys.dm_exec_sessions
WHERE is_user_process = 1
RETURN @user_count
END
SELECT dbo.UserstoServer()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment