従業員の最終権限評価スコアを提示しています。各行は従業員のデータであり、評価されるカテゴリは期間ごとに変わる可能性があるため、ストアド プロシージャで列名をハードコーディングすることはできません。私はすでに次の解決策を考案しました。
1 一時テーブルを作成する
2 Alter Table コマンドを動的に使用して、該当するすべての列を追加する (@ColumnNames に格納される)
3 カーソル内で動的 SQL を使用して、正しいスコアを取得する各従業員の挿入を書き込む (IE N の従業員は 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 秒かかることです。これはすぐに受け入れられなくなります…</p>
続行する方法について、より良いアイデアを持っている人はいますか? カーソルを (明らかに) 削除し、1 つの挿入 (おそらく Select into) を使用することは、おそらく動的に作成された XML 変数から読み取る最初のアイデアです…</p>
ありがとう、