
- •ProblemForExamSqlQuery17.Sql - Test
- •ProblemForExamSqlQuery17.Sql - Solution
- •ProblemForExamSqlQuery16.Sql - Test
- •ProblemForExamSqlQuery16.Sql - Solution
- •ProblemForExamSqlQuery19.Sql - Test
- •ProblemForExamSqlQuery19.Sql – Solution
- •ProblemForExamSqlQuery25.Sql – Solution
- •Для создания резервной копии базы данных воспользоваться инструкцией backup database, имеющей следующий формат:
- •Имена баз данных экземпляра sql Server можно извлечь из системного представления sys.Databases.
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'. Выходной параметр возвращает количество найденных функций. Созданную хранимую процедуру протестировать.
Рекомендации.
Информацию об объектах базы данных можно извлечь из системного представления sys.objects.
Информацию о модулях базы данных можно извлечь из системного представления 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') в текущей базе данных. Имена функций без параметров не выводить. Имена и список параметров должны выводиться в одну строку. Выходной параметр возвращает количество найденных функций. Созданную хранимую процедуру протестировать.
Рекомендации.
Информацию об объектах базы данных можно извлечь из системного представления sys.objects.
Информацию о параметрах объектов можно извлечь из системного представления sys.parameters.
Вариант 14
Создать хранимую процедуру с выходным параметром, которая уничтожает все представления в текущей базе данных, которые не были зашифрованы. Выходной параметр возвращает количество уничтоженных представлений. Созданную хранимую процедуру протестировать.
Рекомендации.
Для уничтожения представления воспользоваться инструкцией DROP VIEW.
Информацию об объектах базы данных можно извлечь из системного представления sys.objects.
Информацию о модулях базы данных можно извлечь из системного представления sys.sql_modules.