- •SqlQuery03.Sql – Solution
- •ProblemForExamSqlQuery04.Sql - Solution
- •Отредактировать! (вариант 23) ProblemForExamSqlQuery23.Sql - Solution
- •ProblemForExamSqlQuery09.Sql – Solution
- •ProblemForExamSqlQuery13.Sql - Solution
- •ProblemForExamSqlQuery16.Sql - Test
- •ProblemForExamSqlQuery16.Sql - Solution
- •ProblemForExamSqlQuery17.Sql - Test
- •ProblemForExamSqlQuery17.Sql - Solution
- •ProblemForExamSqlQuery20.Sql – Solution
- •Отредактировать! ProblemForExamSqlQuery23.Sql - Solution
- •ProblemForExamSqlQuery25.Sql – Solution
Отредактировать! (вариант 23) ProblemForExamSqlQuery23.Sql - Solution
-- ****************************************************************************************
-- Удалить все многострочные комментарии в процедурах, имена которых не начинаются с 'usp_'
-- ****************************************************************************************
USE demodb
GO
IF OBJECT_ID(N'dbo.DelMultiLineComments') IS NOT NULL
DROP FUNCTION dbo.DelMultiLineComments;
GO
CREATE FUNCTION dbo.DelMultiLineComments (@Input nvarchar(4000))
RETURNS nvarchar(4000)
BEGIN
DECLARE @Output nvarchar(4000)
DECLARE @i int
IF @Input NOT LIKE '%/*%*/%'
BEGIN
SET @Output = REPLACE(@Input , CHAR(10)+CHAR(13), '')
RETURN @Output
END
ELSE
BEGIN
SET @Input = @Input + char(13)
SET @i = 1
WHILE @i <= 5
BEGIN
IF charindex('/*', @Input) > 0 and charindex('*/', @Input, charindex('/*', @Input)) -
charindex('/*',@Input) + 2 > 0
BEGIN
SET @Input = REPLACE( @Input,
substring( @Input,
charindex('/*',@Input),
charindex('*/',@Input, charindex('/*',@Input)) - charindex('/*',@Input) + 2)
, '')
END
SET @i = @i+1
END
SET @Output = dbo.DelMultiLineComments (@Input)
END
RETURN @Output
END
GO
-- ************************************************************************************
-- Тестирование хранимой процедуры
-- ************************************************************************************
USE demodb
GO
SELECT o.object_id AS ID, o.name AS ProcName, dbo.DelMultiLineComments (m.definition) AS ProcText
INTO #T1
FROM sys.objects o INNER JOIN sys.sql_modules m on o.object_id = m.object_id
WHERE o.type = 'P' AND o.name NOT LIKE 'usp_%'
GO
SELECT * FROM #T1
GO
DROP TABLE #T1
GO
Вариант 06
Создать и протестировать хранимую процедуру на T-SQL, которая для базы данных, указываемой параметром процедуры, выводит сведения об индексах таблицы, также указываемой параметром процедуры. Если имя базы данных и/или имя таблицы заданы неверно, то вывести соответствующие сообщения.
USE demodb;
GO
-- ********************************************************************************
-- Создаем хранимую процедуру получения сведений об индексах
-- ********************************************************************************
IF OBJECT_ID(N'dbo.GetInfoAboutIndex', 'P') IS NOT NULL
DROP PROCEDURE dbo.GetInfoAboutIndex;
GO
CREATE PROCEDURE dbo.GetInfoAboutIndex @dbname nvarchar(50), @tblname nvarchar(50)
AS
BEGIN
DECLARE @db_id int;
DECLARE @object_id int;
SET @db_id = DB_ID(@dbname);
IF @db_id IS NULL
BEGIN;
PRINT N'Invalid database';
RETURN;
END;
SET @object_id = OBJECT_ID(@dbname+'.'+@tblname, 'U');
IF @object_id IS NULL
BEGIN;
PRINT N'Invalid object';
RETURN;
END;
SELECT * FROM sys.dm_db_index_physical_stats(@db_id, @object_id, NULL, NULL, NULL);
END;
GO
-- ********************************************************************************
-- Проверяем хранимую процедуру на четырех примерах
-- ********************************************************************************
USE demodb;
GO
EXEC GetInfoAboutIndex @dbname=N'AdventureWorks', @tblname=N'Person.Address'
EXEC GetInfoAboutIndex @dbname=N'Northwind', @tblname=N'dbo.Orders'
EXEC GetInfoAboutIndex @dbname=N'Northwint', @tblname=N'dbo.Orders' -- Invalid database
EXEC GetInfoAboutIndex @dbname=N'Northwind', @tblname=N'Orders' -- Invalid object
GO
------------------
Отредактировать (вариант 16 из SQL 1, )
IF OBJECT_ID ( 'dbo.Metadata', 'P' ) IS NOT NULL
DROP PROCEDURE dbo.Metadata
GO
CREATE PROCEDURE dbo.Metadata
@nametable varchar(10)
AS
if(OBJECT_ID(@nametable)is null)
print 'Invalid table!'
else
begin
SELECT sm.object_id AS TableID, OBJECT_NAME(sm.object_id) AS TableName
FROM sys.dm_db_index_physical_stats(DB_ID() ,OBJECT_ID(@nametable), null, null, null) as sm
end;
GO
EXEC dbo.Metadata 'dbo.H'
GO
Вариант 07
Создать и протестировать многооператорную табличную функцию на T-SQL, которая для символьной строки, указываемой параметром функции, и для символа-разделителя, также указываемого параметром функции, возвращает одностолбцовую таблицу, содержащую строки, расположенные между символами-разделителями.
Вариант 08
Создать и протестировать скалярную функцию на T-SQL, которая проверяет правильность символьной строки, указываемой параметром функции. Символьная строка считается правильной, если она состоит из букв английского алфавита, цифр и символа нижнего подчеркивания. В случае успеха функция возвращает 0, в случае неудачи – количество запрещенных символов.
Вариант 09
В базе данных Northwind создать и протестировать однооператорную табличную функцию, которая возвращает сведения о продуктах (ID продукта, максимальная цена, средняя цена, минимальная цена и название продукта) для всех продуктов категории, указываемой параметром функции.
