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 に答える