Я представляю итоговые оценки авторитетным сотрудникам. Каждая строка представляет собой данные сотрудника, и поскольку оцениваемые категории могут меняться от периода к периоду, имена столбцов не могут быть жестко закодированы в хранимых процедурах. Я уже разработал следующее решение.
1 Создайте временную таблицу
2 Динамически используйте команду «Изменить таблицу» для добавления всех применимых столбцов (хранится в @ColumnNames)
3 Используйте динамический SQL внутри курсора, чтобы написать вставку для каждого сотрудника, которая получает правильные оценки (IE N employee означает N вставок)
(SELECT @ECMScores = COALESCE(@ECMScores + ',', '') + CAST(EIS.ECMScore AS NVARCHAR(1000)) (FROM...))
SET @SQLString = ''
SET @SQLString = @SQLString + 'INSERT INTO #ResultSet ('
SET @SQLString = @SQLString + 'EvaluationScoreID,'
SET @SQLString = @SQLString + 'EmployeeID,'
SET @SQLString = @SQLString + 'EmployeeName,'
SET @SQLString = @SQLString + @ColumnNames
SET @SQLString = @SQLString + ') '
SET @SQLString = @SQLString + 'VALUES ('
SET @SQLString = @SQLString + ''+CAST(@EvaluationScoreID AS NVARCHAR(MAX))+','
SET @SQLString = @SQLString + ''+CAST(@EmployeeID AS NVARCHAR(MAX))+','
SET @SQLString = @SQLString + '"'+@EmployeeName+'",'
SET @SQLString = @SQLString + @ECMScores
SET @SQLString = @SQLString + ')'
EXECUTE sp_executesql @SQLString
Проблема в том, что на каждые 100 сотрудников уходит примерно 1 секунда. Это быстро становится неприемлемым ...
У кого-нибудь есть идеи получше? Удаление курсора (очевидно) и использование одной вставки (возможно, «Выбрать в») - моя первая идея, возможно, чтение из динамически создаваемой переменной XML…
Спасибо