4

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

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

DECLARE @max int = @maxKnownId;
4

2 回答 2

3

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

您对使用该值有什么兴趣?

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

如果您觉得在没有行集的情况下无法轻松地将表达式编写为标量,请通过http://aka.ms/adlfeedback提供您的方案让我们知道。

于 2016-10-17T22:00:26.070 回答
1

感谢您的意见,以下是商业案例 -

我们有来自源的目录数据,我们需要为其生成唯一 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;
于 2016-10-17T22:20:11.370 回答