Ich präsentiere zu einer endgültigen Autorität Bewertungsnoten für Mitarbeiter. Bei jeder Zeile handelt es sich um die Daten eines Mitarbeiters, und da die zu bewertenden Kategorien sich von Periode zu Periode ändern können, können die Spaltennamen in den Stored Procedures nicht fest codiert werden. Ich habe bereits die folgende Lösung entwickelt.
1 Erstellen Sie eine temporäre Tabelle
2 Dynamisch das Alter Table-Befehl verwenden, um alle anwendbaren Spalten (Stored in @ColumnNames)
3 Verwenden Sie dynamische SQL in einem Cursor hinzuzufügen, einen Einsatz für jeden Mitarbeiter zu schreiben, die die richtigen Noten bekommt (IE N Mitarbeiter bedeutet N Einsätze)
MSSQL - Präsentieren von Daten, wenn die Spaltennamen dynamisch sind
(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 + '"'[email protected]+'",'
SET @SQLString = @SQLString + @ECMScores
SET @SQLString = @SQLString + ')'
EXECUTE sp_executesql @SQLString
Das Problem ist es ca. 1 Sekunde für alle 100 Mitarbeiter übernimmt. Dies wird schnell inakzeptabel ...
Hat jemand bessere Ideen, wie es weitergehen soll? Entfernen Sie die Cursor (natürlich), und mit einem Einsatz (Vielleicht in Auswahl) vielleicht meine erste Idee ist aus einer dynamisch erzeugten XML-Variable lesen ...
Danke,