Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BD_Otvety_na_zadachi_SQL_1.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
82.86 Кб
Скачать

ProblemForExamSqlQuery19.Sql - Test

-- **********************************************************************

-- Создаем демонстрационную базу данных с тремя функциями пользователя

-- **********************************************************************

USE master

GO

IF DB_ID (N'sample_db') IS NOT NULL DROP DATABASE sample_db

GO

CREATE DATABASE sample_db

GO

USE sample_db

GO

IF OBJECT_ID('dbo.sample_table', 'U') IS NOT NULL DROP TABLE dbo.sample_table

GO

CREATE TABLE dbo.sample_table

(

c1 int NOT NULL IDENTITY(1,1),

c2 char(10) NULL,

c3 datetime NULL

CONSTRAINT PK_sample_table PRIMARY KEY (c1)

)

GO

INSERT INTO dbo.sample_table (c2, c3)

VALUES ('qwe', GETDATE()), ('asd', GETDATE()), ('zxc', GETDATE())

GO

SELECT * FROM dbo.sample_table

GO

IF OBJECT_ID('dbo.SQL_SCALAR_FUNCTION', 'FN') IS NOT NULL

DROP FUNCTION dbo.SQL_SCALAR_FUNCTION

GO

CREATE FUNCTION dbo.SQL_SCALAR_FUNCTION(@centigrade float) RETURNS float

AS

BEGIN

RETURN ((@centigrade * 1.8) + 32.0)

END

GO

IF OBJECT_ID('dbo.SQL_INLINE_TABLE_VALUED_FUNCTION', 'IF') IS NOT NULL

DROP FUNCTION dbo.SQL_INLINE_TABLE_VALUED_FUNCTION

GO

CREATE FUNCTION dbo.SQL_INLINE_TABLE_VALUED_FUNCTION() RETURNS TABLE

AS

RETURN (SELECT c1, c2 FROM dbo.sample_table)

GO

IF OBJECT_ID('dbo.SQL_TABLE_VALUED_FUNCTION', 'TF') IS NOT NULL

DROP FUNCTION dbo.SQL_TABLE_VALUED_FUNCTION

GO

CREATE FUNCTION dbo.SQL_TABLE_VALUED_FUNCTION()

RETURNS @table_var TABLE (c1 int, c2 char(10))

AS

BEGIN

INSERT INTO @table_var SELECT t.c1, t.c2 FROM sample_table t ORDER BY c2

RETURN

END

GO

-- **********************************************************************

-- Проверяем функции

-- **********************************************************************

SELECT dbo.SQL_SCALAR_FUNCTION(10.0) AS 'SQL_SCALAR_FUNCTION'

SELECT * FROM dbo.SQL_INLINE_TABLE_VALUED_FUNCTION()

SELECT * FROM dbo.SQL_TABLE_VALUED_FUNCTION()

GO

ProblemForExamSqlQuery19.Sql – Solution

-- **********************************************************************

-- Создаем хранимую процедуру удаления всех SQL функций пользователя

-- **********************************************************************

IF OBJECT_ID('dbo.drop_all_SQL_functions', 'P') IS NOT NULL

DROP PROCEDURE dbo.drop_all_SQL_functions

GO

CREATE PROCEDURE dbo.drop_all_SQL_functions @cnt int OUTPUT

AS

BEGIN

DECLARE @function_name nvarchar(255), @SqlString nvarchar(1000)

SET @cnt = 0

DECLARE function_list CURSOR FORWARD_ONLY STATIC FOR

SELECT name FROM sys.objects WHERE type = 'FN' OR type = 'IF' OR type = 'TF'

OPEN function_list

FETCH NEXT FROM function_list into @function_name

WHILE @@FETCH_STATUS = 0

BEGIN

SET @cnt = @cnt+1

SET @SqlString = N'IF OBJECT_ID(N''[dbo].['+@function_name+']'', ''FN'') IS NOT NULL

DROP FUNCTION [dbo].['+@function_name+']'

EXEC (@SqlString)

SET @SqlString = N'IF OBJECT_ID(N''[dbo].['+@function_name+']'', ''IF'') IS NOT NULL

DROP FUNCTION [dbo].['+@function_name+']'

EXEC (@SqlString)

SET @SqlString = N'IF OBJECT_ID(N''[dbo].['+@function_name+']'', ''TF'') IS NOT NULL

DROP FUNCTION [dbo].['+@function_name+']'

EXEC (@SqlString)

FETCH NEXT FROM function_list into @function_name

END

CLOSE function_list

DEALLOCATE function_list

END

GO

-- **********************************************************************

-- Проверяем хранимую процедуру удаления всех SQL функций бпользователя

-- **********************************************************************

SELECT * FROM sys.sql_modules

GO

DECLARE @cnt int

EXEC dbo.drop_all_SQL_functions @cnt OUTPUT

SELECT @cnt

EXEC dbo.drop_all_SQL_functions @cnt OUTPUT

SELECT @cnt

GO

SELECT * FROM sys.sql_modules

GO

Вариант 12

Создать хранимую процедуру с выходным параметром, которая выводит текст на языке SQL всех скалярных SQL функций пользователя (функции типа 'FN') в текущей базе данных, имена которых начинаются с префикса 'ufn'. Выходной параметр возвращает количество найденных функций. Созданную хранимую процедуру протестировать.

Рекомендации.

  1. Информацию об объектах базы данных можно извлечь из системного представления sys.objects.

  2. Информацию о модулях базы данных можно извлечь из системного представления sys.sql_modules.

--------------

DROP PROCEDURE MetadataWorker GO CREATE PROCEDURE MetadataWorker @count INT OUT WITH RECOMPILE AS BEGIN SELECT sm.definition as Def FROM sys.objects AS o JOIN sys.sql_modules AS sm ON sm.object_id = o.object_id WHERE o.type = 'FN' AND o.name LIKE '%'; SET @count = @@ROWCOUNT;  END GO DECLARE @c int; EXEC MetadataWorker @c OUT; PRINT @c; GO

вместо '%' там 'ufn%' или что то такое - в условии префикс указан

Вариант 13

Создать хранимую процедуру с выходным параметром, которая выводит список имен и параметров всех скалярных SQL функций пользователя (функции типа 'FN') в текущей базе данных. Имена функций без параметров не выводить. Имена и список параметров должны выводиться в одну строку. Выходной параметр возвращает количество найденных функций. Созданную хранимую процедуру протестировать.

Рекомендации.

  1. Информацию об объектах базы данных можно извлечь из системного представления sys.objects.

  2. Информацию о параметрах объектов можно извлечь из системного представления sys.parameters.

Вариант 14

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

Рекомендации.

  1. Для уничтожения представления воспользоваться инструкцией DROP VIEW.

  2. Информацию об объектах базы данных можно извлечь из системного представления sys.objects.

  3. Информацию о модулях базы данных можно извлечь из системного представления sys.sql_modules.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]