您好,我是小DAI,专注于数据库管理员相关的技术问答,请问有什么可以帮您?

自动类型派生

描述

可以在不显式指定变量类型的情况下声明变量,并让 SQLScript 自动确定类型。此自动类型派生可用于标量变量、表和数组。

语法

代码语法DECLARE AUTO =  备注缺省值为必填项,不能省略。 备注标量和表变量定义的现有语法展开如下:代码语法本地自动标量变量DECLARE [{, }...] [CONSTANT] AUTO [NOT NULL] 代码语法本地自动表变量DECLARE [{, }...] [CONSTANT] AUTO  注意潜在不兼容性新功能可能会对现有过程或函数造成一些问题,因为 AUTO 现在被解释为比名为 AUTO 的表或表类型优先级更高的关键字。这种不兼容性的解决方法是使用 SCHEMA.AUTO 或加引号的“AUTO”将其解释为表类型。示例代码不兼容性示例create table auto (a bigint);declare tab1 auto = select 1 a, 2 b from dummy;示例代码解决方法-- assume that current schema is schema_xcreate table auto (a bigint);do begin declare tab1 "AUTO"; declare tab2 schema_x.auto;end;

示例

示例代码declare var1 auto = 1.0;declare arr1 auto = array(1, 2);declare tab1 auto = select 1 as x from dummy;

数据类型派生

派生类型由缺省值的类型确定,但不总是与分配中缺省值的评估类型完全相同。如果类型具有长度,则将使用最大长度来提高灵活性。

缺省值的实际类型自动变量的派生类型VARCHAR(n)VARCHAR(MAX_LENGTH)NVARCHAR(n)NVARCHAR(MAX_LENGTH)ALHPANUM(n)ALPHANUM(MAX_LENGTH)VARBINARY(n)VARBINARY(MAX_LENGTH)DECIMAL(p, s)小数SMALLDECIMAL小数 

范围和限制

自动类型可用于 SQLScript 标量和表变量,但具有以下限制:

  • 自动类型不能在触发器内使用

  • 自动类型不能用于行类型变量

  • 如果默认值包含以下内容之一,则无法使用自动类型:系统变量任何表或自动类型表的标量访问

  • 系统变量

  • 任何表或自动类型表的标量访问