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 ) } 参数 是变量的名称。变量名必须以 at 符 (@) 开头。局部变量名必须符合标识符规则。有关更多信息,请参见使用标识符。 data_type 是任何由系统提供的或用户定义的数据类型。变量不能是 text、ntext 或 image 数据类型。有关系统数据类型的更多信息,请参见数据类型。有关用户定义数据类型的更多信息,请参见 。 是游标变量的名称。游标变量名必须以 at 符 (@) 开头并遵从标识符规则。 CURSOR 指定变量是局部游标变量。 table_type_definition 定义表数据类型。表声明包括列定义、名称、数据类型和约束。允许的约束类型只包括 PRIMARY KEY、UNIQUE KEY、NULL 和 CHECK。 table_type_definition 是在 CREATE TABLE 中用于定义表的信息子集。元素和基本定义都包含在该定义中;有关更多信息,请参见 。 n 是表示可以指定多个变量并对变量赋值的占位符。当声明表变量时,表变量必须是 DECLARE 语句中正在声明的唯一变量。 column_name 是表中的列名。 scalar_data_type 指定列是标量数据类型。 [COLLATE collation_name] 指定列的排序规则。collation_name 可以是 Windows 排序规则名称或 SQL 排序规则名称,且只适用于 char、varchar、text、nchar、nvarchar 和 ntext 数据类型的列。如果没有指定,则可给列指定用户定义数据类型的排序规则(如果列为用户定义数据类型)或数据库的默认排序规则。 有关 Windows 和 SQL 排序规则名称的更多信息,请参见 。 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。 局部变量的作用域是在其中声明局部变量的批处理、存储过程或语句块。有关在语句块内使用局部变量的更多信息,请参见。 当前给其指派有游标的游标变量可在下列语句中作为源引用: 在所有这些语句中,如果引用的游标变量存在,但是不具有当前分配给它的游标,那么 Microsoft® SQL Server? 会产生错误。如果引用的游标变量不存在,SQL Server 将产生对另外一类未声明变量所产生的相同错误。 游标变量: 可以在 EXECUTE 语句中作为输出游标参数的目标引用(如果当前没有给游标变量指派游标)。 示例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
DECLARE @local_variable
最新推荐文章于 2021-11-18 10:32:00 发布