是否可以将行集变量转换为标量值,例如。
@maxKnownId =
SELECT MAX(Id) AS maxID
FROM @PrevDayLog;
DECLARE @max int = @maxKnownId;
是否可以将行集变量转换为标量值,例如。
@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;