Программирование на стороне сервера с использованием языка Transact SQL: Лабораторная работа № 9 по курсу «Информационные технологии в менеджменте», страница 3

DECLARE @MyMes           varchar(50)

DECLARE @MyOtherMes varchar(50)

SELECT @MyMes='Ýòî ðåçóëüòàò Return'

print @MyMes

return

SELECT @MyMes='Èçâèíèðå ñþäà íå äîøåë õîä'

print @MyMes

return

·  Создайте сценарий на выполнение процедуры

DECLARE @return int

exec @return=procReturn

select @return                

·  что делает этот оператор select @return?

·  Измените содержание хранимой процедур, так, чтобы она возвращала другое целое число.

·  Задание 11. Обработка побочных ошибок с использование системной переменной @@ERROR.

Разработайте запрос на вставку в таблицу Adv    записи по ученику, сведения о котором не еще не включены в таблицу Ученик.

·  Создайте запрос на вставку и выполните его. Результат:

Msg 547, Level 16, State 0, Line 1

The INSERT statement conflicted with the FOREIGN KEY constraint

"FK_Advencement_piple1". The conflict occurred in database "Uchenic",

table "dbo.piple", column 'id'.

The statement has been terminated.

·  Сохраните код ошибки  в переменной типа int. Для этого измените запрос, вставив операторы определения переменной и присваивания ей значения системной переменной @@ERROR.

Select @error=@@ERROR

·  Выведите код ошибки с текстом. Для этого добавьте оператор:

Print “Это ошибка вставки записи”+CONVERTOR(vachar,@Error)

·  Добавьте еще один оператор вывода кода, но этот уже после предыдущего и вместо переменной @Error используйте системную переменную @@ERROR. Оцените результаты. Дайте объяснение.

DECLARE @Error           int

DECLARE @MyOtherMes varchar(50)

insert into Advencement

values (1, 199, '04.24.2007',2,5)

select @Error=@@ERROR

print 'Kod ERROR '+CONVERT(varchar,@Error)

print ' '

print 'Kod ERROR ' +CONVERT(varchar,@Error)

результат

Msg 547, Level 16, State 0, Line 3

The INSERT statement conflicted with the FOREIGN KEY constraint

"FK_Advencement_piple1". The conflict occurred in database "Uchenic",

table "dbo.piple", column 'id'.

The statement has been terminated.

Kod ERROR 547

Kod ERROR 0

Задание 12. Обработка ошибок в хранимых процедурах с использованием @@ERROR.

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

Для этого

·  Создайте хранимую процедуру с параметрами на основании  предыдущего запроса

Пример.

create proc procErr

as

DECLARE @Error          int

insert into Advencement

values (1, 199, '04.24.2007',2,5)

select @Error=@@ERROR

if (@Error!=0)

begin

--возникла какая-то ошибка

if(@Error=547)

begin

print ('нарушено ограничение’)

print ' '

end

else

begin

print(‘возникла ошибка с кодом'+CONVERT(varchar,@Error))

print ' '

end

RETURN @Error

end

RETURN

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

Пример.

DECLARE @return int

exec @return=procErr

if @return=0

PRINT('Успешно’)

ELSE

PRINT('не успешно’)+CONVERT(varchar,@return)

select @return

·  Выполните тестирование хранимой процедуры. Для разных значений ключа школьника.

Примечание.

Можно выполнить отладку (debag) хранимой процедуры в Visual Studio. Для этого откройте приложение, выполните соединение приложения с вашей БД, воспользовавшись объектом Server Explorer. После подключения найдите хранимую процедуру и вызовите для нее контекстное меню. В контекстном меню выполните команду

Задание 13. Исследуйте возможности Try/Catch для обработки ошибок в хранимых процедурах.

·  Создайте копию хранимой процедуры задания 12

·  Измените ее согласно примера

Alter proc procErr

as

DECLARE @Error          int

DECLARE @MyOtherMes varchar(50)

Begin Try

insert into Advencement

values (1, 5, '04.24.2007',2,5)

select @Error=@@ERROR

end Try

Begin Catch

--Errors  Define her

DECLARE @ErrorNo int, @Severity tinyint,

@State smallint, @LineNo int ,@Message  nvarchar(4000)

SELECT

@ErrorNo =ERROR_NUMBER(),     //это функции применяемые

@Severity =ERROR_Severity (), // при проверке ошибок

@State =ERROR_State(),        //дополнительно см. в T-SQL

@LineNo =ERROR_Line(),        //

@Message  =ERROR_Message()    //

if(@Error=547)

begin

print ('Constrain')

print ' '

end

else

begin

print('Error kod='+CONVERT(varchar,@Error))

print ' '

end

RETURN @Error

end catch

RETURN

·  Испытайте процедуру, используя тотже сценарий вызова.

Задание 14. Обработка ошибок до того как они происходят

Задание 15. Активизация ошибок до того как они происходят

Задание 16. Сообщения определяемые пользователем

7.  Пользовательские функции.

8.  Транзакции и блокировки

9.  Триггеры

10.  Представления