||= (复合赋值) (Transact-SQL)

适用于:Azure SQL 数据库 Microsoft Fabric SQL 数据库

||=与复合赋值运算符的串联可用于将表达式与字符或二进制字符串变量的值连接,然后将生成的表达式分配给变量。

||= 运算符支持与字符和二进制字符串的 += 运算符 相同的行为。

Transact-SQL 语法约定

语法

variable ||= expression

参数

variable

字符类型的 T-SQL 变量:char、varcharncharnvarcharvarchar(max)nvarchar(max)或二进制类型:binary 或 varbinary 或 varbinary(max)。

expression

字符或二进制 表达式。 如果表达式不是字符类型,则表达式的类型必须能够隐式转换为字符串。

返回类型

将字符串串联运算符的结果分配给变量。

  • 如果变量或表达式是 SQL NULL 值,则串联表达式的结果为 NULL
  • 如果变量是大型对象(LOB)数据类型(varchar(max)nvarchar(max),则生成的表达式为 varchar(max)nvarchar(max)。
  • 如果变量是 LOB 类型 varbinary(max),则生成的表达式为 varbinary(max)。
  • 如果变量不是 LOB 类型,则结果将被截断为变量声明类型的最大长度。

注解

如果字符串串联的结果超出 8,000 字节的限值,则结果将被截断。 但是,如果串联的字符串中至少有一个是较大的值类型,则不会发生截断。

在二进制字符串之间串联二进制字符串和任何字符串时,必须显式转换字符数据。

零长度字符串和字符

||= (字符串串联)运算符在处理空字符串、零长度字符串时的行为方式与处理NULL值或未知值时的行为不同。 长度为零的字符串可以指定为两个引号,引号内没有任何字符。 可以将零长度二进制字符串指定为 0x 没有十六进制常量中指定的任何字节值。 串联长度为零的字符串始终要串联上述两个指定的字符串。

NULL 值的串联

与对 NULL 值执行的算术运算一样,将值添加到已知值时 NULL ,结果通常是一个 NULL 值。 使用 NULL 值执行的字符串串联操作也应生成结果 NULL

运算符||=不遵循该SET CONCAT_NULL_YIELDS_NULL选项,并且总是像启用 ANSI SQL 行为一样的行为,如果任一输入是NULL,则NULL产生。 这是连接运算符与||=串联运算符之间+=行为的主要差异。 有关详细信息,请参阅 SET CONCAT_NULL_YIELDS_NULL

示例

A. 将串联与字符串的复合赋值配合使用

DECLARE @v1 varchar(10) = 'a'
SET @v1 ||= 'b';
SELECT @v1

结果集如下。

ab

B. 将串联与二进制数据复合赋值配合使用

DECLARE @v2 varbinary(10) = 0x1a;
SET @v2 ||= 0x2b;
select @v2;

结果集如下。

0x1A2B