Просто используйте Hash[*array_variable.flatten]
, Например:
a1 = ['apple', 1, 'banana', 2]
h1 = Hash[*a1.flatten(1)]
puts "h1: #{h1.inspect}"
a2 = [['apple', 1], ['banana', 2]]
h2 = Hash[*a2.flatten(1)]
puts "h2: #{h2.inspect}"
Используя Array#flatten(1)
пределы рекурсия так Array
ключи и значения работают как ожидалось.
Вы можете указать предложение OUTPUT в своем операторе MERGE и получить выходной отчет о том, что было сделано во время MERGE.
MERGE (targetTable) AS t
USING (sourceTable) AS s
ON t.ID = s.ID
WHEN MATCHED THEN
(some statements)
WHEN NOT MATCHED THEN
(some statements)
OUTPUT
$action, inserted.ID 'inserted', deleted.ID 'deleted'
;
Это даст вам строку для каждого «действия» (вставка, обновление, удаление) для каждой операции. Если операторов много, можно также OUTPUT INTO @tableVar, а затем просмотреть переменную таблицы.
DECLARE @tableVar TABLE (MergeAction VARCHAR(20), InsertedID INT, DeletedID INT)
MERGE (targetTable) AS t
USING (sourceTable) AS s
ON t.ID = s.ID
WHEN MATCHED THEN
(some statements)
WHEN NOT MATCHED THEN
(some statements)
OUTPUT
$action, inserted.ID 'inserted', deleted.ID 'deleted' INTO @tableVar
;
SELECT MergeAction, COUNT(*)
FROM @tableVar
GROUP BY MergeAction
Подробную информацию об операторе MERGE и предложении OUTPUT OUTPUT .
Марк
Как насчет:
INSERT YourResultsTable (action, cnt)
SELECT action, count(*)
FROM
(
MERGE (targetTable) AS t
USING (sourceTable) AS s
ON t.ID = s.ID
WHEN MATCHED THEN (some statements)
WHEN NOT MATCHED THEN (some statements)
OUTPUT $action as action, inserted.ID as ins, deleted.ID as del
) m
GROUP BY action;
[Edit] Хорошо, попробуйте:
INSERT YourResultsTable (action)
SELECT action
FROM
(
MERGE (targetTable) AS t
USING (sourceTable) AS s
ON t.ID = s.ID
WHEN MATCHED THEN (some statements)
WHEN NOT MATCHED THEN (some statements)
OUTPUT $action as action, inserted.ID as ins, deleted.ID as del
) m;
(а затем посчитайте результаты)
Роб