Сохранение значений, вычисляемых оператором SELECT в локальных переменных 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Сохранение значений, вычисляемых оператором SELECT в локальных переменных



Результат выполнения оператора SELECT может быть не только возвращен приложению, направившему запрос, или сохранен в новой таблице, но и в отдельных случаях записан в переменные программы. В переменных сохраняется последнее значение, созданное в соответствующем элементе списка вывода при выполнении запроса. Для сохранения значения в переменной элемент списка вывода имеет вид:

@< имя локальной переменной > = < выражение >.

Например, операторы dычисляют и сохраняют в переменной @n количество строк в таблице authors. Последний оператор используется для вывода значения из переменной @n, поскольку присваивающий оператор SELECT не передает данные клиенту, пославшему запрос:

DECLARE @n int

SELECT @n = COUNT(*) FROM authors

SELECT @n (это выводит результат)

Последовательность операторов сохраняет в переменных, а затем выводит фамилию и имя автора из последней строки таблицы authors:

DECLARE @au_ln varchar(40),@au_fn varchar(20)

SELECT @au_ln = au_lname, @au_fn = au_fname FROM authors

SELECT @au_ln, @au_fn

Типы данных для переменных:

-Int char(<n>) – строка фикс.длины Float

Decimal varchar(<n>) – строка переменной длины

-DATETIME

SET DATEFORMAT <формат даты> SET DATEFORMAT dmy – день, месяц, год.

-MONEY – денежный, до 4 десятичных цифр -TABLE – значение – таблица.

Результат SELECT может быть сохранен в новой таблице базы или в переменной программы:

Select @<имя переменной>=<выражение>

DECLARE @p datetime

SELECT @p = max(ord_date) FROM dbo.titles INNER JOIN dbo.Sales ON dbo.titles.title_id = sales.title_id WHERE titles.title=’…’

SELECT titles.* ord_date FROM dbo.titles INNER JOIN dbo.Sales ON dbo.titles.title_id = sales. title_id WHERE ord_date>@p

Не знаю, что за запрос, но был в лекциях.

Использование табличной переменной.

DECLARE @Tab table (Fint, S varchar(70))

Insert @Tab select * FROM T1 Дважды добавляются строки из Т1

Insert @Tab select * FROM T1

SELECT * FROM @Tab вывод

Оператор SET SET @<имя переменной>=<выражение>, …

DECLARE @save_error int SET @save_error = @@Error

Вывод значений переменных

1. SELECT DECLARE @X int, @Y varchar(12) SELECT @X,@Y Выведет: NULL NULL

2. Print Print <выражение числовое, строковое> Print @save_error – выведет 0

DECLARE @X integer Print @X или Print @X+10 – выведет невидимый результат


Структурные операторы Transact SQL: IF, GO TO, WHILE, WAITFOR. Примеры применения.

Составной оператор:

BEGIN

<Оператор T-SQL>

END

Оператор передачи управления

GO TO <метка>

<метка>:< Оператор T-SQL >

Условный оператор:

IF<исчисляемое выражение>

< Оператор T-SQL>

ELSE

< Оператор T-SQL>

Анализ результата запроса: IF [NOT] EXISTS (SELECT * FROM …)

Оператор цикла:

WHILE <логическое выражение>

< Оператор T-SQL>

CONTINUE

BREAK

 

Оператор ожидания WAITFOR

-время задержки следующего оператора

- момент времени продолжения исполнения оператора

WAITFOR DELAY/TIME

BEGIN

WAITFOR TIME ’22:20’

……………….

END

 


 

Обработка исключений в программах Transact SQL. Функции для анализа причины исключений и вывода сообщений.

Cообщения сервера:

RAISERROR(<номер/текст сообщения>,<уровень серьезности>,<состояние>)

Sysmessages – таблица в БД MASTER хранит все сообщения сервера (пользоват.сообщения >500)

 

Обработка исключений

BEGIN TRY

………….

END TRY

BEGIN CATCH

………..

END CATCH

 

Use pubs

BEGIN TRY

INSERT authors VALUES’()

PRINT ‘Правильно!’

END TRY

BEGIN CATCH

PRINT ‘Обнаружен дубликат первичного ключа’

END CATCH

 

Анализ исключения

1. Проверка кода ошибки @@ERROR

…………….. – блок TRY

BEGIN CATCH

IF @@ERROR = 2627 – код дубликата РК

OR INT

ELSE

PRINT

END CATCH

 

2. Использование специальных функций:

Error_number(), Error_message(), Error_severity(), Error_state(), Error_line(), Error_procedure()

 

3. Замена исключения функцией

RAISERROR()

Команда GO разбивает набор операторов скрипта на отдельные независимо исполняемые пачки

DECLARE @p float

SELECT @p = max (price) FROM titles

GO

Print @p – неизвестная переменная @p

 


 



Поделиться:


Последнее изменение этой страницы: 2017-01-25; просмотров: 101; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.133.156.156 (0.005 с.)