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&reg; SQL Server&#8482; 会产生错误。如果引用的游标变量不存在,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&copy;1988-2000 Microsoft Corporation。保留所有权利。

解决方案 »

  1.   

    字符串
    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) 个字符。