質問

私は従業員のための最終的な権限の評価点を提示しています。各行は、従業員のデータであり、カテゴリが評価されるので、列名は、ストアドプロシージャにハードコードすることができない期間ごとに変更することができます。私はすでに、次の解決策を考案しました。

1一時テーブルを作成します。
図2は、動的(@ColumnNamesに格納されている)
該当するすべての列を追加するには、ALTER TABLEコマンドを使用し 正しいスコアを取得し、各従業員のためのインサートを書き込むためのカーソル内部3を使用し、動的SQL(すなわち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秒を要しています。これはすぐに許容できなくなる...

誰もが続行する方法上の任意のより良いアイデアを持っていますか? (多分に選択)カーソルを(明らかに)の削除、および1つのインサートを使用することで、おそらく、動的に作成されたXML変数からの読み取り私の最初のアイデア...

おかげで、

役に立ちましたか?

解決

スキーマ内のデータを格納しません。

このようなテーブルを作成します:

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..

あなたは今、「割り当て」を作成し、列は常に変化するため、動的なクエリを構築することなく、「スコア」を挿入することができます。あなたの列は、今と同じままになり、データが変更されます。

他のヒント

まず第一に、あなたは、データベースの構造を変更する機会を持っているでしょうか?私が正しく理解していれば、フィールドのEIS.ECMScore のは、それが正規化ルールの違反だこれは、複数の値が含まれています。私は個人的にテーブルのEIS のを再設計し、それはあなたのタスクは、はるかに簡単になるだろうとして、それを正規化します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top