DECLARE @local_variable (Transact-SQL)
Изменения: 5 декабря 2005 г.
Переменные объявляются в теле пакета или процедуры при помощи инструкции DECLARE, а значения им присваиваются при помощи инструкций SET или SELECT. При помощи этой инструкции можно объявлять переменные курсоров для использования в других инструкциях. После объявления все переменные инициализируются значением NULL.
Синтаксические обозначения в Transact-SQL
Синтаксис
DECLARE
{{ @local_variable [AS] data_type }
| { @cursor_variable_name CURSOR }
| { @table_variable_name [AS] < table_type_definition > }
} [ ,...n]
< table_type_definition > ::=
TABLE ( { < column_definition > | < table_constraint > } [ ,... ]
)
< column_definition > ::=
column_name { scalar_data_type | AS computed_column_expression }
[ COLLATE collation_name ]
[ [ DEFAULT constant_expression ] | IDENTITY [ ( seed,increment ) ] ]
[ ROWGUIDCOL ]
[ < column_constraint > ]
< column_constraint > ::=
{ [ NULL | NOT NULL ]
| [ PRIMARY KEY | UNIQUE ]
| CHECK ( logical_expression )
}
< table_constraint > ::=
{ { PRIMARY KEY | UNIQUE } ( column_name [ ,... ] )
| CHECK ( search_condition )
}
Аргументы
- ****@**local_variable
Имя переменной. Имена переменных должны начинаться с символа @. Имена локальных переменных должны соответствовать правилам имен для идентификаторов. Дополнительные сведения см. в разделе Использование идентификаторов в качестве имен объектов.
- data_type
Любой системный тип данных, определяемый пользователем тип данных CLR или псевдоним типа данных. Переменная не может принадлежать к типу данных text, ntext или image. Дополнительные сведения о системных типах данных см. в разделе Типы данных. Дополнительные сведения об определяемых пользователем типах данных CLR или о псевдонимах типов данных см. в разделе CREATE TYPE (Transact-SQL).
- ****@**cursor_variable_name
Имя переменной курсора. Имена переменных курсора должны начинаться с символа @ и должны соответствовать правилам именования идентификаторов.
- CURSOR
Указывает, что переменная является локальной переменной курсора.
- @table_variable_name
Имя переменной типа table. Имена переменных должны начинаться с символа @ и соответствовать правилам именования идентификаторов.
table_type_definition
Определяет тип данных table. Объявление таблицы включает в себя определения столбцов, имен, типов данных и ограничений. Допустимы только ограничения PRIMARY KEY, UNIQUE, NULL и CHECK. Псевдоним типа данных не может использоваться как скалярный тип данных столбца, если с этим столбцом связано правило или значение по умолчанию.Аргумент table_type_definition представляет собой подмножество данных, используемых для определения таблицы в инструкции CREATE TABLE. Сюда включены элементы и наиболее существенные определения. Дополнительные сведения см. в разделе CREATE TABLE.
- n
Заполнитель, указывающий на то, что могут быть заданы несколько переменных и им могут быть присвоены значения. При объявлении переменных типа table в инструкции DECLARE единственной объявляемой переменной должна быть переменная типа table.
- column_name
Имя столбца таблицы.
- scalar_data_type
Указывает, что столбец имеет скалярный тип данных.
- computed_column_expression
Выражение, определяющее значение вычисляемого столбца. Значение вычисляется из выражения при помощи других столбцов той же таблицы. Например, вычисляемый столбец может иметь определение cost AS price * qty. Выражение может быть именем невычисляемого столбца, константой, встроенной функцией или любым их сочетанием, созданным с помощью одного или нескольких операторов. Выражение не может быть вложенным запросом или пользовательской функцией. Выражение не может ссылаться на определяемый пользователем тип данных CLR.
[ COLLATE collation_name ]
Определяет параметры сортировки для столбца. Аргумент collation_name может быть именем параметров сортировки Windows или SQL, и это имя применимо только для столбцов типов char, varchar, text, nchar, nvarchar и ntext. Если этот аргумент не указан, столбцу назначаются либо параметры сортировки определяемого пользователем типа данных (если столбец принадлежит к определяемому пользователем типу данных), либо параметры сортировки текущей базы данных.Дополнительные сведения об именах параметров сортировки Windows и SQL см. в разделе COLLATE.
- DEFAULT
Указывает значение, записывающееся в столбец, если оно не задано явно при вставке. Определения DEFAULT могут применяться к любым столбцам, за исключением столбцов, определенных с типом timestamp, или столбцов со свойством IDENTITY. Определения DEFAULT удаляются при удалении таблицы. По умолчанию могут использоваться только константные значения, например символьные строки, системные функции, например SYSTEM_USER(), или NULL. Для сохранения совместимости с более ранними версиями сервера SQL Server значению DEFAULT может быть присвоено имя ограничения.
- constant_expression
Константа, NULL или системная функция, используемые в качестве значения по умолчанию для столбца.
- IDENTITY
Указывает, что новый столбец является столбцом идентификаторов. При добавлении в таблицу новой строки сервер SQL Server сохраняет в этот столбец уникальное добавочное значение. Столбцы идентификаторов наиболее часто используются в сочетании с ограничениями PRIMARY KEY для выполнения функции уникального идентификатора строки таблицы. Свойство IDENTITY может быть назначено столбцам типа tinyint, smallint, int, decimal(p,0) или numeric(p,0). В каждой таблице может быть создан только один столбец идентификаторов. Связанные аргументы по умолчанию и ограничения DEFAULT со столбцом идентификаторов использоваться не могут. Необходимо указывать либо оба значения seed и increment, либо ни то, ни другое. Если ничего не указано, применяется значение по умолчанию (1,1).
- seed
Значение, используемое для самой первой строки, загружаемой в таблицу.
- increment
Значение, добавляемое к значению идентификатора предыдущей загруженной строки.
- ROWGUIDCOL
Указывает, что новый столбец является столбцом глобального уникального идентификатора строки. В таблице может быть только один столбец uniqueidentifier со свойством ROWGUIDCOL. Свойство ROWGUIDCOL можно присвоить только столбцу, имеющему тип uniqueidentifier.
- NULL | NOT NULL
Ключевые слова, определяющие, допустимы ли в столбце значения NULL.
- PRIMARY KEY
Ограничение, которое с помощью уникального индекса требует целостности сущностей для данного столбца или столбцов. В каждой таблице может быть создано только одно ограничение PRIMARY KEY.
- UNIQUE
Ограничение, которое с помощью уникального индекса обеспечивает целостность сущностей для данного столбца или столбцов. В таблице может быть несколько ограничений UNIQUE.
- CHECK
Ограничение, требующее целостности домена путем ограничения возможных значений, которые могут быть введены в столбец или столбцы.
- logical_expression
Логическое выражение, возвращающее значения TRUE или FALSE.
Замечания
Переменные часто используются в пакете или процедуре в качестве счетчиков для циклов WHILE, LOOP или в блоке IF…ELSE.
Переменные могут использоваться в выражениях, но не вместо имен объектов или ключевых слов. Для построения динамических инструкций SQL используйте EXECUTE.
Областью локальной переменной является пакет, в котором она объявлена.
На переменную курсора, которая в настоящее время содержит назначенный ей курсор, можно ссылаться в качестве источника из:
- инструкции CLOSE;
- инструкции DEALLOCATE;
- инструкции FETCH;
- инструкции OPEN;
- позиционированных инструкций DELETE или UPDATE;
- инструкции SET CURSOR с использованием переменных (в правой части).
Во всех этих инструкциях сервер Microsoft SQL Server формирует ошибку, если переменная курсора, на которую они ссылаются, существует, но не содержит курсор, назначенный ей в настоящее время. Если переменная курсора, на которую производится ссылка, не существует, сервер SQL Server формирует ту же ошибку, что и для необъявленной переменной другого типа.
Значения переменной курсора не изменяются после объявления курсора. В сервере SQL Server версии 6.5 и в более ранних версиях значения переменной обновляются при каждом открытии курсора.
Переменная курсора:
- Может быть целью типа курсора или другой переменной курсора. Дополнительные сведения см. в разделе SET @локальная_переменная.
- Может быть объектом ссылки в качестве цели выходного параметра курсора в инструкции EXECUTE, если эта переменная не содержит курсора, назначенного ей в настоящее время.
- Должна рассматриваться в качестве указателя на курсор. Дополнительные сведения о переменных курсора см. в разделе Курсоры языка Transact-SQL.
Примеры
A. Использование инструкции DECLARE
В следующем примере локальная переменная с именем @find используется для получения контактных данных для лиц с фамилией, начинающихся на «Man».
USE AdventureWorks;
GO
DECLARE @find varchar(30);
SET @find = 'Man%';
SELECT LastName, FirstName, Phone
FROM Person.Contact
WHERE LastName LIKE @find;
Результирующий набор:
LastName FirstName Phone
-------------------------------------------------- -------------------------------------------------- -------------------------
Manchepalli Ajay 1 (11) 500 555-0174
Manek Parul 1 (11) 500 555-0146
Manzanares Tomas 1 (11) 500 555-0178
(3 row(s) affected)
Б. Использование инструкции DECLARE с двумя переменными
В следующем примере получаются имена коммерческих представителей компании Adventure Works Cycles с объемом продаж на сумму не менее 2 000 000 долларов в год, находящихся на территории продаж Северной Америки.
USE AdventureWorks;
GO
SET NOCOUNT ON;
GO
DECLARE @Group nvarchar(50), @Sales money;
SET @Group = N'North America';
SET @Sales = 2000000;
SET NOCOUNT OFF;
SELECT FirstName, LastName, SalesYTD
FROM Sales.vSalesPerson
WHERE TerritoryGroup = @Group and SalesYTD >= @Sales;
В. Объявление переменной типа table с помощью инструкции DECLARE
В следующем примере создается переменная типа table, в которой хранятся значения, задаваемые в предложении OUTPUT инструкции UPDATE. Затем следуют две инструкции SELECT
, которые возвращают значения в таблицу @MyTableVar
, а результаты операции обновления — в таблицу Employee
. Обратите внимание, что результаты в столбце INSERTED.ModifiedDate
отличаются от значений в столбце ModifiedDate
таблицы Employee
. Это связано с тем, что для таблицы Employee
определен триггер AFTER UPDATE
, обновляющий значение ModifiedDate
до текущей даты. Однако столбцы, возвращаемые из OUTPUT
, отражают данные перед срабатыванием триггеров. Дополнительные примеры использования предложения OUTPUT см. в разделе Предложение OUTPUT (Transact-SQL).
USE AdventureWorks;
GO
DECLARE @MyTableVar table(
EmpID int NOT NULL,
OldVacationHours int,
NewVacationHours int,
ModifiedDate datetime);
UPDATE TOP (10) HumanResources.Employee
SET VacationHours = VacationHours * 1.25
OUTPUT INSERTED.EmployeeID,
DELETED.VacationHours,
INSERTED.VacationHours,
INSERTED.ModifiedDate
INTO @MyTableVar;
--Display the result set of the table variable.
SELECT EmpID, OldVacationHours, NewVacationHours, ModifiedDate
FROM @MyTableVar;
GO
--Display the result set of the table.
--Note that ModifiedDate reflects the value generated by an
--AFTER UPDATE trigger.
SELECT TOP (10) EmployeeID, VacationHours, ModifiedDate
FROM HumanResources.Employee;
GO
См. также
Справочник
EXECUTE (Transact-SQL)
Функции (Transact-SQL)
SELECT (Transact-SQL)
table (Transact-SQL)
Другие ресурсы
Типизированный и нетипизированный XML
Изменение значений переменных и параметров определяемых пользователем типов
Справка и поддержка
Получение помощи по SQL Server 2005
Журнал изменений
Версия | Журнал |
---|---|
5 декабря 2005 г. |
|