Domanda

che vi presento un finale i punteggi di valutazione l'autorità per i dipendenti. Ogni riga è i dati di un dipendente e dato che le categorie da valutare può cambiare da periodo a periodo i nomi delle colonne non possono essere hardcoded nelle stored procedure. Ho già messo a punto la seguente soluzione.
1 Creare una tabella temporanea
2 dinamicamente utilizzare il comando ALTER TABLE per aggiungere tutte le colonne applicabili (memorizzato in @ColumnNames)
3 Utilizzare SQL dinamico all'interno di un cursore di scrivere un inserto per ogni dipendente che ottiene i punteggi corretti (dipendenti IE N significa inserti 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

Il problema è che ci vuole circa 1 secondo per ogni 100 dipendenti. Questo diventa rapidamente inaccettabile ...

Qualcuno ha qualche idea migliore su come procedere? Rimozione del cursore (ovviamente), e l'utilizzo di un inserto (Forse Selezionare in) è la mia prima idea, forse la lettura da una variabile XML creato in modo dinamico ...

Grazie,

È stato utile?

Soluzione

non conservare i dati nello schema

creare tabelle come questo:

Assignment
AssignmentID   int not null primary key identity(1,1)
AssignmentName varchar(50)  not null
AssignmentDate datetime not null
etc..

Score
ScoreID       int not null primary key identity(1,1)
EmployeeID    int not null
AssignmentID  int not null
ScoreValue    int not null

Employee
EmployeeID    int not null primary key identity(1,1)
EmployeeName  varhar(100) not null
etc..

ora è possibile creare "assegnazioni" e inserire "punteggi" senza costruire query dinamiche perché il vostro colonne cambiano sempre. le colonne ora rimanere lo stesso ei dati cambieranno.

Altri suggerimenti

Prima di tutto, vuoi avere la possibilità di modificare la struttura del database? Se ho capito bene, campo EIS.ECMScore contiene più valori, che si tratta di una violazione delle regole di normalizzazione. Personalmente mi ridisegnare tabella EIS e normalizzare esso, in quanto renderebbe il vostro compito molto più facile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top