• 相关软件
    >DECLARE @local_variable 创建者:webmaster 更新时间:2006-02-16 15:51

    在批处理或过程的正文中用 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



    是任何由系统提供的或用户定义的数据类型。变量不能是 textntextimage 数据类型。有关系统数据类型的更多信息,请参见数据类型。有关用户定义数据类型的更多信息,请参见 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 排序规则名称,且只适用于 charvarchartextncharnvarcharntext 数据类型的列。如果没有指定,则可给列指定用户定义数据类型的排序规则(如果列为用户定义数据类型)或数据库的默认排序规则。



    有关 Windows 和 SQL 排序规则名称的更多信息,请参见 COLLATE



    DEFAULT



    如果在插入过程中未显式提供值,则指定为列提供的值。DEFAULT 定义可适用于除定义为 timestamp 或带 IDENTITY 属性的列以外的任何列。除去表时,将删除 DEFAULT 定义。只有常量值(如字符串)、系统函数(如 SYSTEM_USER())或 NULL 可用作默认参数。为保持与 SQL Server 早期版本的兼容,可以给 DEFAULT 指派约束名。



    constant_expression



    是用作列的默认值的常量、NULL 或系统函数。



    IDENTITY



    表示新列是标识列。在表中添加新行时,SQL Server 为列提供一个唯一的增量值。标识列通常与 PRIMARY KEY 约束一起用作表的唯一行标识符。可以将 IDENTITY 属性指派给 tinyintsmallintintdecimal(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)
    相关文章
    本页查看次数: