在批处理或过程的正文中用 DECLARE 语句声明变量,并用 SET 或 SELECT 语句给其指派值。游标变量可通过该语句声明,并且可用在其它与游标相关的语句中。所有变量在声明后均初始化为 NULL。
DECLARE
{{ @local_variable data_type }
| { @cursor_variable_name CURSOR }
| { table_type_definition }
} [ ,...n]
< table_type_definition > ::=
TABLE ( { < column_definition > | < table_constraint > } [ ,...]
)
< column_definition > ::=
column_name scalar_data_type
[ 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
是变量的名称。变量名必须以 at 符 (@) 开头。局部变量名必须符合标识符规则。有关更多信息,请参见使用标识符。
data_type
是任何由系统提供的或用户定义的数据类型。变量不能是 text、ntext 或 image 数据类型。有关系统数据类型的更多信息,请参见数据类型。有关用户定义数据类型的更多信息,请参见 sp_addtype。
@cursor_variable_name
是游标变量的名称。游标变量名必须以 at 符 (@) 开头并遵从标识符规则。
CURSOR
指定变量是局部游标变量。
table_type_definition
定义表数据类型。表声明包括列定义、名称、数据类型和约束。允许的约束类型只包括 PRIMARY KEY、UNIQUE KEY、NULL 和 CHECK。
table_type_definition 是在 CREATE TABLE 中用于定义表的信息子集。元素和基本定义都包含在该定义中;有关更多信息,请参见 CREATE TABLE。
n
是表示可以指定多个变量并对变量赋值的占位符。当声明表变量时,表变量必须是 DECLARE 语句中正在声明的唯一变量。
column_name
是表中的列名。
scalar_data_type
指定列是标量数据类型。
[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 约束。必须同时指定种子和增量,或者都不指定。如果二者都未指定,则取默认值 (1,1)。
seed
是装入表的第一行所使用的值。
increment
是添加到以前装载的列标识值的增量值。
ROWGUIDCOL
表示新列是行的全局唯一标识符列。对于每个表只能指派一个 uniqueidentifier 列作为 ROWGUIDCOL 列。ROWGUIDCOL 属性只能指派给 uniqueidentifier 列。
NULL | NOT NULL
是决定在列中是否允许空值的关键字。
PRIMARY KEY
是通过唯一索引对给定的一列或多列强制实体完整性的约束。对于每个表只能创建一个 PRIMARY KEY 约束。
UNIQUE
是通过唯一索引为给定的一列或多列提供实体完整性的约束。一个表可以有多个 UNIQUE 约束。
CHECK
是通过限制可输入到一列或多列中的可能值强制域完整性的约束。
logical_expression
是返回 TRUE 或 FALSE 的逻辑表达式。
变量常用在批处理或过程中,作为 WHILE、LOOP 或 IF...ELSE 块的计数器。
变量只能用在表达式中,不能代替对象名或关键字。若要构造动态 SQL 语句,请使用 EXECUTE。
局部变量的作用域是在其中声明局部变量的批处理、存储过程或语句块。有关在语句块内使用局部变量的更多信息,请参见使用 BEGIN...END。
当前给其指派有游标的游标变量可在下列语句中作为源引用:
在所有这些语句中,如果引用的游标变量存在,但是不具有当前分配给它的游标,那么 Microsoft® SQL Server™ 会产生错误。如果引用的游标变量不存在,SQL Server 将产生对另外一类未声明变量所产生的相同错误。
游标变量:
下例使用名为 @find 的局部变量检索所有姓以 Ring 开头的作者信息。
USE pubs
DECLARE @find varchar(30)
SET @find = 'Ring%'
SELECT au_lname, au_fname, phone
FROM authors
WHERE au_lname LIKE @find
下面是结果集:
au_lname au_fname phone
-------------------------------------- -------------------- ------------
Ringer Anne 801 826-0752
Ringer Albert 801 826-0752
(2 row(s) affected)
下例从 Binnet & Hardley (pub_id = 0877) 的雇员中检索从 1993 年 1 月 1 日起所雇佣的雇员名称。
USE pubs
SET NOCOUNT ON
GO
DECLARE @pub_id char(4), @hire_date datetime
SET @pub_id = '0877'
SET @hire_date = '1/01/93'
-- Here is the SELECT statement syntax to assign values to two local
-- variables.
-- SELECT @pub_id = '0877', @hire_date = '1/01/93'
SET NOCOUNT OFF
SELECT fname, lname
FROM employee
WHERE pub_id = @pub_id and hire_date >= @hire_date
下面是结果集:
fname lname相关文章
-------------------- ------------------------------
Anabela Domingues
Paul Henriot
(2 row(s) affected)