declare 是定义变量时才用而如果是存储过程的或函数的参数的话,就不用

解决方案 »

  1.   


    declare 是声明一个变量你用在AS前面的变量是传入变量,无须DECLARE声明。提示:用DELCARE声明一个变量,就必须再用SET 给这个变量付值。
      

  2.   

    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)