Ваш метод создания temp и последующего использования оператора UPDATE для обновления каждого столбца снизит производительность запроса, и вы заметите это в больших таблицах. Даже если вы используете временные таблицы, это не значит, что это сделает это быстрее.
Есть много способов получить нужный вам результат с минимальными усилиями. Например, вы можете использовать агрегатные функции с помощью JOIN для получения одинаковых результатов в одном запросе.
Что касается меня, я вижу, что ваши выходные данные будут состоять из одной строки с общими заявками, суммарными вставленными ошибками и списком ошибочных заявок. Итак, я предполагаю, что вывод всегда будет одной строкой при каждом запуске процедуры.
В этом случае вы можете использовать переменные, это будет примерно так:
DECLARE
@Total INT
, @TotalInserted INT
, @TotalErroredOut INT
, @ErroredClaims NVARCHAR(MAX);
SELECT
@Total = SUM(CASE WHEN ta.[claimnumber] IN (d.claimnumber) THEN 1 ELSE 0 END)
, @TotalInserted = SUM(CASE WHEN ta.[claimnumber] NOT IN (d.claimnumber) THEN 1 ELSE 0 END)
, @TotalErroredOut = SUM(CASE WHEN ta.[claimnumber] IN (d.claimnumber) THEN 1 ELSE 0 END) - SUM(CASE WHEN ta.[claimnumber] NOT IN (d.claimnumber) THEN 1 ELSE 0 END)
, @ErroredClaims = COALESCE(@col + ',', '') + CASE WHEN ta.[claimnumber] NOT IN (d.claimnumber) THEN ta.[claimnumber] ELSE '' END
FROM
[Operations Productivity Tool].[dbo].[test_importedauditdata] ta
OUTER APPLY (
SELECT DISTINCT claimnumber
FROM [dbo].[opcod audit information] ts
WHERE
[final status] NOT IN ('Finding', 'No Finding')
) d
WHERE
claimnumber IN (d.claimnumber)
и затем используйте объявленные переменные в вашем следующем действии.
Приведенный выше пример кода может содержать ошибки, но он просто показывает вам другой способ мышления и может привести вас к лучшему подходу.