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

Отредактировать! (вариант 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 продукта, максимальная цена, средняя цена, минимальная цена и название продукта) для всех продуктов категории, указываемой параметром функции.

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