抄自:http://topic.csdn.net/t/20040402/09/2916128.html


  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™   会产生错误。如果引用的游标变量不存在,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  
   
  函数  
   
  SELECT  
   
  table