Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Контрольная работа (вариант №9).doc
Скачиваний:
40
Добавлен:
01.04.2014
Размер:
157.18 Кб
Скачать

3. Дополните сценарий текстами перечисленных ниже хранимых процедур:

3.1. Создайте хранимую процедуру, которая для указанной таблицы подсчитывает число строк, содержащихся в этой таблице. Эта процедура должна иметь один входной параметр (с помощью которого задается имя таблицы) и один выходной параметр.

CREATE PROCEDURE procedure1

@t_name nvarchar(30),

@res int OUTPUT

AS

BEGIN

DECLARE @sql nvarchar(50)

DECLARE @p nvarchar(50)

SET @sql = N'SELECT @temp = COUNT(*) FROM ' + @t_name

SET @p = N'@temp int OUTPUT'

EXEC sp_executesql @sql, @p, @temp = @res OUTPUT

END

GO

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

CREATE PROCEDURE procedure2

@status CHARACTER,

@days int

AS

BEGIN

DECLARE @col nvarchar(30)

DECLARE @tab nvarchar(30)

IF @status = '-'

SET @days = -@days

DECLARE cur CURSOR LOCAL DYNAMIC

FOR

SELECT COLUMN_NAME, TABLE_NAME FROM INFORMATION_SCHEMA.[COLUMNS] c

WHERE (c.DATA_TYPE='datetime')

OPEN cur

FETCH NEXT FROM cur INTO @col, @tab

WHILE @@FETCH_STATUS = 0

BEGIN

EXEC ('UPDATE '+@tab+' SET '+@col+' = DATEADD(day, '+@days+', '+@col+')')

FETCH NEXT FROM cur INTO @col, @tab

END

END

GO

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

CREATE PROCEDURE procedure3

@c_name nvarchar(30),

@r_min int OUTPUT,

@r_avg int OUTPUT,

@r_max int OUTPUT,

@r_sum int OUTPUT

AS

BEGIN

DECLARE @sql nvarchar(50),

@p nvarchar(50)

SET @sql = N'SELECT @t_min = MIN(' +@c_name + ') FROM материалы'

SET @p = N'@t_min int OUTPUT'

EXEC sp_executesql @sql, @p, @t_min = @r_min OUTPUT

SET @sql = N'SELECT @t_avg = AVG(' +@c_name + ') FROM материалы'

SET @p = N'@t_avg int OUTPUT'

EXEC sp_executesql @sql, @p, @t_avg = @r_avg OUTPUT

SET @sql = N'SELECT @t_max = MAX(' +@c_name + ') FROM материалы'

SET @p = N'@t_max int OUTPUT'

EXEC sp_executesql @sql, @p, @t_max = @r_max OUTPUT

SET @sql = N'SELECT @t_sum = SUM(' +@c_name + ') FROM материалы'

SET @p = N'@t_sum int OUTPUT'

EXEC sp_executesql @sql, @p, @t_sum = @r_sum OUTPUT

END

GO

3.4. Создайте хранимую процедуру, которая из конкретной таблицы отбирает строки по условию, налагаемому на значения конкретных двух столбцов. Эта процедура должна иметь два входных параметра, задающих значения для отбора данных по каждому из этих столбцов. При этом значение NULL должно трактоваться как отсутствие какого-либо критерия отбора строк по данному столбцу (например, если оба параметра будут иметь значение NULL, то должны быть выбраны все строки таблицы).

CREATE PROCEDURE procedure4

@param1 nvarchar(30),

@param2 nvarchar(30)

AS

BEGIN

IF (@param1 IS NOT NULL) AND (@param2 IS NULL)

EXEC (N'SELECT * FROM материалы WHERE цена > ' + @param1)

ELSE

IF (@param1 IS NULL) AND (@param2 IS NOT NULL)

EXEC (N'SELECT * FROM материалы WHERE цена < ' + @param2)

ELSE

IF (@param1 IS NOT NULL) AND (@param2 IS NOT NULL)

EXEC (N'SELECT * FROM материалы WHERE цена > ' + @param1 + ' AND цена< '+@param2)

ELSE

EXEC (N'SELECT * FROM материалы')

END