Программирование >>  Программирование баз данных 

1 ... 307 308 309 [ 310 ] 311 312 313 ... 346


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

Системная переменная @@error

Системная переменная @@ERROR содержит код ошибки, относящийся к последнему оператору T-SQL, который был выполнен в текущем соединении. Если ошибка не возникла, то эта системная переменная содержит значение 0.

Системная переменная @@ERROR становится особенно важной при создании хранимых процедур или триггеров; в этом случае без ее использования практически невозможно обойтись.

Следует помнить, что полученное значение системной переменной @@ERROR относится только к последнему выполненному оператору. Это означает, что если необходимо провести проверку на наличие ошии после выполнения какого-то конкретного оператора, то такая проверка должна быть предусмотрена в непосредственно следующим за ним операторе; еще одна возможность сохранить значение этой переменной состоит в том, чтобы присвоить его какой-то промежуточной переменной.

Со списком всех системных ошибок можно ознакомиться с помощью системной таблицы sysmes sages базы данных master.

Для создания собственных пользовательских сообщений об ошибках можно воспользоваться процедурой sp addmessage.

Системная переменная ©©fetch status

Системная переменная @@FETCH STATUS содержит индикатор состояния последней операции FETCH с курсором.

При использовании курсоров практически невозможно обойтись без системной переменной @@FETCH STATUS. Именно эта переменная позволяет определить, успешной или неудачной была попытка перейти к определенной строке в курсоре. Значения этой переменной представляют собой константы, присваиваемые переменной с учетом того, была ли в СУБД SQL Server успешно выполнена последняя операция FETCH с курсором, а если операция FETCH окончилась неудачей, позволяет узнать причину ошибки. Эти константы перечислены ниже.

0. Успешное завершение.

-1. Неудачное завершение. Как правило, возникновение данной ситуации связано с тем, что указатель курсора находится за пределами набора данных курсора (перед началом или вслед за концом набора данных).

-2. Неудачное завершение. Бьыа предпринята попытка выборки строки, но эта строка не найдена. Обычно такая ситуация возникает в связи с тем, что строка удалена в промежутке времени между созданием набора данных курсора и попыткой перейти к этой строке. Обычно такая ошибка возникает только в прокручиваемых, нединамических курсорах.



Для удобства чтения рекомендуется объявлять некоторые константы перед использованием системной переменной @@FETCH STATUS. Примеры подобных объявлений приведены ниже.

DECLARE ©NOTFOUND int DECLARE ©BEGINEND int

SELECT ©NOTFOUND = -2 SELECT ©BEGINEND = -1

Этот подход позволяет применять подобные константы в конструкции WHILE оператора обработки курсора в цикле, а не просто задавать целое число. Благодаря этому удобство чтения кода значительно повышается.

Системная переменная ©©identity

Системная переменная ©©IDENTITY содержит последнее идентификационное значение, созданное в текущем соединении.

Если в процессе работы осуществляется вставка идентификационных значений в столбцы идентификации, а затем эти значения используются для формирования ссылки на исходную таблицу в другой таблице (в качестве внешнего ключа), то приходится постоянно использовать системную переменную ©©IDENTITY. При этом создается родительская строка (обычно содержащая значение типа identity, подлежащее выборке), а затем осуществляется выборка значения ©©IDENTITY для определения того, какое значение ключа должно применяться для обеспечения связи между родительской и дочерней строками.

Если данные вставляются с применением идентификационных значений в несколько таблиц, то следует помнить, что системная переменная ©©IDENTITY всегда содержит значение последнего вставленного идентификационного значения; все промежуточные значения теряются, если не предусмотрено их присваивание каким-то промежуточным переменным после вьшолнения каждой операции вставки. Кроме того, если последняя строка, в которую была выполнена вставка, не содержит столбца идентификации, то системная переменная ©©IDENTITY содержит NULL-значение.

Системная переменная ©©idle

Системная переменная ©©IDLE содержит значение времени в миллисекундах (точность которого зависит от степени дискретизации показаний системного таймера) , в течение которого СУБД SQL Server простаивала со времени своего последнего запуска.

Системная переменная ©©IDLE может рассматриваться как в определенном смысле противоположная системной переменной ©©CPU BUSY. По существу, она содержит значение, которое позволяет узнать о том, сколько времени было израсходовано СУБД SQL Server в состоянии простоя. Если кто-либо сумеет найти рациональное применение в программе для этой переменной, пусть отправит мне письмо по электронной почте; я был бы рад узнать, что это возможно (сам я не смог придумать ни одного способа ее применения).



Системная переменная @@io busy

Системная переменная @@io BUSY содержит значение времени в миллисекундах (точность которого зависит от степени дискретизации показаний системного таймера), затраченного SQL Server на выполнение операций ввода-вывода со времени последнего запуска. Это значение сбрасывается после каждого перезапуска СУБД SQL Server.

Фактически при использовании этой системной переменной не возникают какие-либо сложности, но она, по мнению автора, также относится к категории переменных, для которых трудно найти в программе рациональное применение.

Системные переменные @®langid и ©©language

Системные переменные @@LANGID и ©©LANGUAGE содержат соответственно идентификатор и имя языка, используемого в настоящее время.

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

Для получения полного списка языков, поддерживаемых в настоящее время программным обеспечением SQL Server, воспользуйтесь системной хранимой процедурой sp helplanguage.

Системная переменная ©©locktimeout

Системная переменная @@LOCK TIMEOUT содержит текущее значение времени в миллисекундах, в течение которого система ожидает освобождения заблокированного ресурса.

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

По умолчанию время ожидания установлено равным нулю. Это равносильно требованию устанавливать неопределенно долгую продолжительность ожидания. Иное значение эта переменная может приобрести, только если кто-то изменяет его на уровне системы (с помощью хранимой процедуры sp c on figure). Но, независимо от значения, заданного в системе по умолчанию, попытка получрггь значение системной переменной @@LOCK TIMEOUT приводит к получению -1, если требуемое значение текущего соединения не установлено вручную с помощью оператора SET LOCK TIMEOUT.

Системная переменная ©©maxconnections

Системная переменная @@MAX CONNECTIONS содержит данные о максимальном количестве одновременных пользовательских соединений, которые разрешается устанавливать в СУБД SQL Server.

Не следует ошибочно считать, что эти данные означают то же самое, что и данные, содержащиеся в свойстве Maximum Connections, которое можно найти в программе Management Console. Рассматриваемое значение определяется с учетом правил лицензирования и составляет очень большую величину, если выбран принцип лицензирования на каждое рабочее место ( per seat ).



1 ... 307 308 309 [ 310 ] 311 312 313 ... 346

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика