将行集变量转换为标量值

Convert Rowset variables to scalar value

是否可以将行集变量转换为标量值,例如

@maxKnownId =
    SELECT MAX(Id) AS maxID
    FROM @PrevDayLog;

DECLARE @max int = @maxKnownId;

U-SQL 中没有单单元格行集到标量值的隐式转换(目前)。

您有兴趣将该值用于什么用途?

大多数情况下,您可以用不需要标量变量的方式编写 U-SQL 表达式。例如,如果你想在另一个查询的条件中使用该值,你可以在与另一个查询的连接中使用单值行集(并且使用正确的统计信息,我很确定优化器会将它变成一个广播加入)。

如果您觉得没有行集就无法轻松地将表达式写成标量,请通过 http://aka.ms/adlfeedback 提供您的场景让我们知道。

感谢您的投入,以下是业务案例-

我们有来自源的目录数据,我们需要为其生成唯一 ID。使用 ROW_NUMBER() OVER() AS Id 方法我们可以生成唯一的 id。但是在合并新记录时它也会更改现有记录的 ID 并导致关系数据出现问题

下面是简单的解决方案

//get max id from existing catalog

@maxId =
    SELECT (int)MAX(Id) AS lastId
    FROM @ExistingCat;

//because @maxId is not scalar, we will do CROSS JOIN so that maxId is repeated for every record.
//ROW_NUMBER() always starts from 1, we can generate next Id with maxId+ROW_NUMBER()

@newRecordsWithId =
    SELECT (int)lastId + (int)ROW_NUMBER() OVER() AS Id,
           CatalogItemName
    FROM @newRecords CROSS JOIN @maxId;