Студопедия
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Условия тестирования

Читайте также:
  1. I. Работы с тяжелыми и вредными условиями труда
  2. I. СИСТЕМА ПСИХОЛОГИЧЕСКОГО ОБЕСПЕЧЕНИЯ ОБРАЗОВАНИЯ В СОВРЕМЕННЫХ УСЛОВИЯХ
  3. II. Работы с особо тяжелыми и особо вредными условиями труда
  4. III. УСЛОВИЯ И СРОКИ ПРОВЕДЕНИЯ КОНКУРСА
  5. III. Условия реализации учебной практики
  6. IV.5.1. Условия проведения контрольного эксперимента
  7. V. Порядок организации и условия проведения Конкурса
  8. А) исследование понимания как условия осмысления социального бытия;
  9. Адаптация осужденных к условиям лишения свободы
  10. Актуальность правовых основ работы с молодежью в условиях развития гражданского общества в современной России.

EXEC usp_01 @path = 'D:\BACKUP\'

GO

 

 

Вариант 16

 

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

 

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

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

a. Идентификатор базы данных - можно получить с помощью функции метаданных DB_ID.

b. Идентификатор таблицы - можно получить с помощью функции метаданных OBJECT_ID.

c. Для прочих параметров можно указать значения NULL.

2. Если имя таблицы задано неверно, напечатать сообщение 'Invalid table'.

 

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

 

Вариант 17

 

Создать хранимую процедуру с входным параметром, которая выводит имена хранимых процедур, созданных с параметром WITH RECOMPILE, в тексте которых на языке SQL встречается строка, задаваемая параметром процедуры. Созданную хранимую процедуру протестировать.

 

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

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

 

CREATE PROCEDURE MetadataWorker

@TextToCheck NVARCHAR(20)

WITH RECOMPILE

AS

SELECT sm.object_id AS ProcedureID, OBJECT_NAME(sm.object_id) AS ProcedureName

FROM sys.sql_modules AS sm

JOIN sys.objects AS o ON sm.object_id = o.object_id

WHERE sm.is_recompiled = 1 AND sm.definition LIKE '%' + @TextToCheck + '%'

GO

 

EXEC MetadataWorker 'SELECT sm.object_id'

GO

 

EXEC MetadataWorker 'SEasdasd'

GO

 

 

Вариант 18

 

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

 

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

  1. Информацию о таблицах базы данных можно извлечь из системного представления sys.objects.
  2. Для перестроения индексов для таблицы в указанной базе данных воспользоваться командой DBCC DBREINDEX.
  3. Использовать значение коэффициента заполнения для индекса, указанное при создании индекса.

 

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

/*

REBUILD_INDEX

Написать хранимую процедуру без параметров, которая перестраивает все индексы всех таблиц в схеме dbo в произвольной базе данных, например, Northwind. Для перестроения индексов для таблицы в указанной базе данных воспользолваться командой DBCC DBREINDEX. Использовать значение коэффициента заполнения для индекса, указанное при создании индекса.

*/

USE Northwind

GO

ALTER PROCEDURE REBUILD_INDEX

AS

BEGIN

DECLARE @tablename varchar(255), @tablename_header varchar(600), @sql varchar(600)

DECLARE tnames_cursor CURSOR FOR

SELECT 'tablename'=o.name

FROM sys.objects o WHERE o.type = 'U' AND o.principal_id IS NULL

OPEN tnames_cursor

FETCH NEXT FROM tnames_cursor INTO @tablename

WHILE (@@fetch_status <> -1)

BEGIN

IF (@@fetch_status <> -2)

BEGIN

SELECT @tablename_header = '*** Updating '+rtrim(upper(@tablename))+'('+convert(varchar, getdate(), 20) + ') ***'

PRINT @tablename_header

SELECT @sql = 'DBCC DBREINDEX("dbo.'+@tablename+'", '''',0)'

EXEC (@sql)

END

FETCH NEXT FROM tnames_cursor INTO @tablename

END

PRINT '*** DBREINDEX have been updated for all tables (' + convert(varchar,getdate(),20) + ') ***'

CLOSE tnames_cursor

DEALLOCATE tnames_cursor

END

GO

-- Тестирование хранимой процедуры

USE Northwind

GO

EXEC REBUILD_INDEX

GO

 

 

Вариант 19

 

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

 

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

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

 

CHARINDEX (expression1,expression2 [, start_location ])

Выполняет поиск выражения expression1 в выражении expression2 и в случае обнаружения возвращает его начальную позицию. Поиск начинается с аргумента start_location.

 

SUBSTRING (value_expression, start_expression, length_expression)

Возвращает фрагмент символьного, двоичного, текстового или графического выражения.

 

DATALENGTH (expression)

Возвращает число байтов, использованных для представления выражения.

 

use iu7_51_stas;

go

 

CREATE procedure SeachInStored

as

select distinct Substring(sc.text,Charindex('exec',sc.text,1),Charindex(' ',sc.text,Charindex('exec',sc.text,1)+7)-Charindex('exec',sc.text,1))

from syscomments sc inner join sysobjects so on sc.id = so.id

where sc.text like '%exec%' and exists(

Select *

from sysobjects so1

where so1.name = Substring(sc.text,Charindex('exec',sc.text,1)+5,Charindex(' ',sc.text,Charindex('exec',sc.text,1)+7)-Charindex('exec',sc.text,1)-5)

)

 

GO

 

exec SeachInStored

 

 

Вариант 20

 

Создать хранимую процедуру с входным параметром – имя базы данных, которая выводит имена ограничений CHECK и выражения SQL, которыми определяются эти ограничения CHECK, в тексте которых на языке SQL встречается предикат 'LIKE'. Созданную хранимую процедуру протестировать.

 

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

  1. Информацию об объектах базы данных можно извлечь из системного представления sys.objects.
  2. Информацию об ограничениях CHECK можно извлечь из системного представления sys.check_constraints.
  3. Если имя базы данных задано неверно, напечатать сообщение 'Invalid database'.

 

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

(скорее всего не то)

USE tempdb

GO

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

DROP PROCEDURE dbo.GetInfoAboutIndexes;

GO

CREATE PROCEDURE dbo.GetInfoAboutIndexes (@dbname nvarchar(128))

AS

BEGIN

DECLARE @db_id int;

SET @db_id = DB_ID(@dbname); -- Возвращает идентификационный номер базы данных

IF @db_id IS NULL

BEGIN;

PRINT N'Invalid database';

RETURNCHECK

END;

DECLARE @command nvarchar(1000);

SET @command = N'USE ' + @dbname;

EXEC (@command);

SELECT

s.[name] AS SchemaName,

o.[name] AS TableName,

i.[name] AS IndexName,

f.[avg_fragmentation_in_percent] AS FragPercent,

f.fragment_count

FROM sys.dm_db_index_physical_stats(@db_id, NULL, NULL, NULL, DEFAULT) f -- Возвращает сведения о размере и фрагментации данных и индексов указанной таблицы или представления

JOIN sys.indexes i -- Содержит по одной строке для каждого индекса

ON f.[object_id] = i.[object_id] AND f.[index_id] = i.[index_id]

JOIN sys.objects o -- Содержит по одной строке для каждого определенного пользователем объекта в области схемы

ON i.[object_id] = o.[object_id]

JOIN sys.schemas s -- Содержит по одной строке для каждой схемы базы данных

ON o.[schema_id] = s.[schema_id]

WHERE o.[is_ms_shipped] = 0 AND i.[is_disabled] = 0 -- Объект пользовательский (0) и индекс не отключен (0).

END

GO

-- Тестирование созданной процедуры

EXEC dbo.GetInfoAboutIndexes N'Northwind'

GO

 




Дата добавления: 2015-02-16; просмотров: 77 | Поможем написать вашу работу | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2025 год. (0.017 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав