Transact-SQL 参考
DECLARE @local_variable
在批处理或过程的正文中用 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。当前给其指派有游标的游标变量可在下列语句中作为源引用: CLOSE 语句。
DEALLOCATE 语句。
FETCH 语句。
OPEN 语句。
定位 DELETE 或 UPDATE 语句。
SET CURSOR 变量语句(在右侧)。
在所有这些语句中,如果引用的游标变量存在,但是不具有当前分配给它的游标,那么 Microsoft® SQL Server™ 会产生错误。如果引用的游标变量不存在,SQL Server 将产生对另外一类未声明变量所产生的相同错误。游标变量: 可以是游标类型或另一个游标变量的目标。有关更多信息,请参见 SET @local_variable。
可以在 EXECUTE 语句中作为输出游标参数的目标引用(如果当前没有给游标变量指派游标)。
应被看作是指向游标的指针。有关游标变量的更多信息,请参见 Transact-SQL 游标。
示例
A. 使用 DECLARE
下例使用名为 @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)B. 在 DECLARE 中使用两个变量
下例从 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)
请参见EXECUTE函数SELECTtable©1988-2000 Microsoft Corporation。保留所有权利。
char固定长度的非 Unicode 字符数据,最大长度为 8,000 个字符。varchar可变长度的非 Unicode 数据,最长为 8,000 个字符。text可变长度的非 Unicode 数据,最大长度为 2^31 - 1 (2,147,483,647) 个字符。Unicode 字符串
nchar固定长度的 Unicode 数据,最大长度为 4,000 个字符。 nvarchar可变长度 Unicode 数据,其最大长度为 4,000 字符。sysname 是系统提供用户定义的数据类型,在功能上等同于 nvarchar(128),用于引用数据库对象名。ntext可变长度 Unicode 数据,其最大长度为 2^30 - 1 (1,073,741,823) 个字符。