Skip to content

Instantly share code, notes, and snippets.

@GhostRJY
Created March 2, 2025 20:57
Show Gist options
  • Save GhostRJY/300d5dd501b14c2e279484e945a975ae to your computer and use it in GitHub Desktop.
Save GhostRJY/300d5dd501b14c2e279484e945a975ae to your computer and use it in GitHub Desktop.
--USER DEFINED FUNCTIONS:
--1. Написать функцию, которая покажет список всех пользовательских баз данных SQL Server, и их общие размеры в байтах
CREATE OR ALTER FUNCTION sizeOfBases()
RETURNS @listOfBases TABLE(file_name nvarchar(50), size_of_file float)
AS
BEGIN
INSERT @listOfBases
SELECT s.name [название файла], s.size/128.0 [размер Мб]
FROM sys.master_files s
WHERE s.file_id ='1'
RETURN
END
SELECT * FROM sizeOfBases()
--2. Написать функцию, которая покажет список всех таблиц базы данных, название которой передано как параметр,
--количество записей в каждой из её таблиц, и общий размер каждой таблицы в байтах
--3. Написать функцию, которая покажет список всех полей определённой таблицы, имя которой передаётся как параметр. Если есть
--несколько одноимённых таблиц (в разных БД) - показать информацию по каждой таблице. Кроме названия поля указать его тип,
--поддержку нулевых значений и перечень всех ограничений
CREATE OR ALTER FUNCTION ShowTableFields(@tableName nvarchar(128))
RETURNS TABLE
AS
RETURN
(
SELECT
col.name [Название столбцов],
type.name [Тип],
col.is_nullable [может быть NULL],
cons.constraint_type [тип связи]
FROM sys.columns col
JOIN sys.types type ON col.user_type_id = type.user_type_id
LEFT JOIN
(SELECT
tc.table_name,
kcu.column_name,
tc.constraint_type
FROM
information_schema.table_constraints tc
JOIN
information_schema.key_column_usage kcu
ON tc.constraint_name = kcu.constraint_name
) cons ON cons.column_name = col.name
WHERE
OBJECT_NAME(col.object_id) = @tableName
)
GO
USE Warehouse
SELECT * FROM ShowTableFields('Product')
--4. Написать пользовательскую функцию, которая покажет количество присоединённых к серверу пользователей
CREATE OR ALTER FUNCTION ConnectedUsersCount()
RETURNS INT
AS
BEGIN
DECLARE @userCount int
SELECT @userCount = COUNT(*)
FROM sys.dm_exec_sessions
WHERE is_user_process = 1 -- Учитываем только пользовательские сессии
RETURN @userCount
END
SELECT ConnectedUserCount()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment