Читайте также:
|
|
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 встречается строка, задаваемая параметром процедуры. Созданную хранимую процедуру протестировать.
Рекомендации.
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
Создать хранимую процедуру без параметров, которая перестраивает все индексы всех таблиц в текущей базе данных. Созданную хранимую процедуру протестировать.
Рекомендации.
-------------------
/*
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', которая выполняет хранимую процедуру или скалярную пользовательскую функцию. Созданную хранимую процедуру протестировать.
Рекомендации.
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'. Созданную хранимую процедуру протестировать.
Рекомендации.
----------------------
(скорее всего не то)
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 | Поможем написать вашу работу | Нарушение авторских прав |