2011-02-07 2 views
0

SQL Server上で完璧に動作するSQLコードがありますが、SSRSで実行するとうまく動作しますが、変数に定数を代入すると、値。SSRSでt sqlピボットテーブルを使用しているときにエラーが発生しました

これは私が使用しているコードです。

------LISTADO DE calificaciones de ESTUDIANTES 
DECLARE @PivotColumnHeaders VARCHAR(MAX) 
SELECT @PivotColumnHeaders = 
    COALESCE(
    @PivotColumnHeaders + ',[' + cast(Codigo as varchar) + ']', 
    '[' + cast(Codigo as varchar)+ ']' 
) 
FROM RubroCalificaciones 
inner join RubrosMetodosEvaluacion on RubroCalificaciones.IdRubro = RubrosMetodosEvaluacion.IdRubro 
inner join MetodosEvaluacion on RubrosMetodosEvaluacion.IdMetodoEvaluacion = MetodosEvaluacion.IdMetodoEvaluacion 
inner join AsignacionesMetodosEvaluacion on AsignacionesMetodosEvaluacion.IdMetodoEvaluacion = MetodosEvaluacion.IdMetodoEvaluacion 
where AsignacionesMetodosEvaluacion.IdGrupo = @IdGrupo--293856 

DECLARE @PivotTableSQL NVARCHAR(MAX) 
SET @PivotTableSQL = N' 
    SELECT * 
    FROM (
select Estudiantes.Matricula, Personas.Nombres, Personas.Apellido1, personas.Apellido2, 
RubroCalificaciones.Codigo, CalificacionesDetalle.PuntosAsignados 
from Matriculas 
inner join Personas on Matriculas.IdPersona = Personas.IdPersona 
inner join Estudiantes on Matriculas.IdPersona = Estudiantes.IdPersona 
inner join AsignacionesMetodosEvaluacion on Matriculas.IdGrupo = AsignacionesMetodosEvaluacion.IdGrupo 
inner join MetodosEvaluacion on AsignacionesMetodosEvaluacion.IdMetodoEvaluacion = MetodosEvaluacion.IdMetodoEvaluacion 
inner join RubrosMetodosEvaluacion on MetodosEvaluacion.IdMetodoEvaluacion = RubrosMetodosEvaluacion.IdMetodoEvaluacion 
inner join RubroCalificaciones on RubroCalificaciones.IdRubro = RubrosMetodosEvaluacion.IdRubro 
left outer join CalificacionesDetalle on CalificacionesDetalle.IdRubro = RubrosMetodosEvaluacion.IdRubro and 
CalificacionesDetalle.IdMetodoEvaluacion = RubrosMetodosEvaluacion.IdMetodoEvaluacion 
and CalificacionesDetalle.IdMatricula = Matriculas.IdMatricula 
where Matriculas.IdGrupo = @IdGrupo--293856 

) AS PivotData 
    PIVOT (
    max(PuntosAsignados) 
    FOR Codigo IN (
     ' + @PivotColumnHeaders + ' 
    ) 
) AS PivotTable 
' 

EXECUTE(@PivotTableSQL) 

答えて

0

変数を動的SQLに渡す必要があります。また、私はCOALESCEを書き直しました。あなたは一度だけカラムが必要です。

CREATE PROC NameThisProcedure 
    @IdGrupo int 
AS 
------LISTADO DE calificaciones de ESTUDIANTES 
DECLARE @PivotColumnHeaders VARCHAR(MAX) 
SELECT @PivotColumnHeaders = 
    COALESCE(
    @PivotColumnHeaders + ',', '') + '[' + cast(Codigo as varchar)+ ']' 
FROM RubroCalificaciones 
inner join RubrosMetodosEvaluacion on RubroCalificaciones.IdRubro = RubrosMetodosEvaluacion.IdRubro 
inner join MetodosEvaluacion on RubrosMetodosEvaluacion.IdMetodoEvaluacion = MetodosEvaluacion.IdMetodoEvaluacion 
inner join AsignacionesMetodosEvaluacion on AsignacionesMetodosEvaluacion.IdMetodoEvaluacion = MetodosEvaluacion.IdMetodoEvaluacion 
where AsignacionesMetodosEvaluacion.IdGrupo = @IdGrupo--293856 

DECLARE @PivotTableSQL NVARCHAR(MAX) 
SET @PivotTableSQL = N' 
    SELECT * 
    FROM (
select Estudiantes.Matricula, Personas.Nombres, Personas.Apellido1, personas.Apellido2, 
RubroCalificaciones.Codigo, CalificacionesDetalle.PuntosAsignados 
from Matriculas 
inner join Personas on Matriculas.IdPersona = Personas.IdPersona 
inner join Estudiantes on Matriculas.IdPersona = Estudiantes.IdPersona 
inner join AsignacionesMetodosEvaluacion on Matriculas.IdGrupo = AsignacionesMetodosEvaluacion.IdGrupo 
inner join MetodosEvaluacion on AsignacionesMetodosEvaluacion.IdMetodoEvaluacion = MetodosEvaluacion.IdMetodoEvaluacion 
inner join RubrosMetodosEvaluacion on MetodosEvaluacion.IdMetodoEvaluacion = RubrosMetodosEvaluacion.IdMetodoEvaluacion 
inner join RubroCalificaciones on RubroCalificaciones.IdRubro = RubrosMetodosEvaluacion.IdRubro 
left outer join CalificacionesDetalle on CalificacionesDetalle.IdRubro = RubrosMetodosEvaluacion.IdRubro and 
CalificacionesDetalle.IdMetodoEvaluacion = RubrosMetodosEvaluacion.IdMetodoEvaluacion 
and CalificacionesDetalle.IdMatricula = Matriculas.IdMatricula 
where Matriculas.IdGrupo = @IdGrupo--293856 

) AS PivotData 
    PIVOT (
    max(PuntosAsignados) 
    FOR Codigo IN (
     ' + @PivotColumnHeaders + ' 
    ) 
) AS PivotTable 
' 

EXECUTE sp_executeSQL @PivotTableSQL, N'@IdGrupo int', @IdGrupo 
GO 
+0

は、動的SQLで何を意味するのですか?私は、コードの下を参照して、パラメータ値 – Carlos

+0

@Carlosを送信するアプリケーションを持っています。あなたは動的SQLに@IdGrupoを持っており、値は与えられませんでした。あなたは 'sp_ExecuteSQL'を使用し、@IdGrupo値を動的SQLに渡す必要があります。 – RichardTheKiwi

+0

はい、私はそれを見ますが、それはパラメータです。 – Carlos

関連する問題