Внимание! Идентифицирующие значения
Переменные
Переменные, параметры и коды возврата
SQL Server предоставляет объекты трех типов для передачи значений в ваш программный (клиентский по отношению к СУБД) код, а также возврата скалярного значения вызывающей серверный код на Transact-SQL программе.
Переменные обеспечивают манипулирование данными, их хранение и передачу как внутри процедуры, так и между хранимыми процедурами и функциями. В SQL Server есть два вида переменных: локальные и глобальные. Локальная переменная обозначается одним символом "эт" (@), а глобальная переменная — двумя (@@). Кроме того, локальные переменные вы можете создавать, читать и писать в них, а глобальные переменные можно только читать. В табл. 1 перечислены некоторые самые популярные глобальные переменные.
Таблица 1. Глобальные переменные
Глобальная переменная | Описание |
@@ERROR | Код ошибки последней выполненной инструкции |
@@IDENTITY | Последнее идентифицирующее значение, вставленное в текущем соединении с SQL Server |
@@ROWCOUNT | Количество строк, обработанных последней инструкцией |
@@TRANCOUNT | Количество открытых транзакций в текущем соединении |
@@VERSION | Версия SQL Server |
Переменная @@identity содержит последнее идентифицирующее значение, вставленное в таблицу или представление в текущем соединении c SQL Server. Если вы вызываете несколько программных кодов, вставляющих идентифицирующие значения, последнее вставленное значение всегда содержится в переменной @@identity. Например, если вызывается процедура, вставляющая строку в таблицу ТаblеА, которая содержит триггер, вставляющий строки в таблицы TableB, TableC и TableD, причем каждая вставка генерирует новое значение идентификации, значение @@identity, которое извлекается следом за вставкой в таблицу ТаblеА, соответствует значению идентификации, вставленному в TableD. Из-за этого ограничения применять @@identity не рекомендуется. Используйте вместо нее функцию scope identity(), которая вернет последнее идентифицирующее значение, вставленное в пределах текущей инструкции.
Конкретная переменная, которая не является входным параметром функции или процедуры, можно определить с помощью инструкции declare, в которой указываете имя и тип данных переменной. У переменной может быть любой тип данных, кроме типов text, ntext и image. Например,
DECLARE @intvariable INT,
@datevariable date
-- В вышеприведенном коде определены 2 переменные:
-- @intvariable – типа int,
-- @datevariable – типа date
-- В коде, приведенном ниже, определена табличная --- переменная, состоящая из 2-х столбцов:
-- ID – типа int, Patient – типа VARCHAR(50).
-- Оба столбца не могут быть равны null.
-- Сама табличная переменная хранится в оперативной -- памяти и удаляется при покидании программы -- пределов видимости переменной.
DECLARE @tablevar table
(
ID INT not null,
Patient VARCHAR(50) NOT NULL
)