Ayuda urgente por favor

09/10/2008 - 23:35 por Cristian Meneses | Informe spam
Buenas tardes
Tengo una consulta hecha dentro de un procedimiento almacenado, la
cual no me genera error en el procedimiento mismo, pero si al
ejecutarla. He sacado la consulta para poder debuguear el error y
probar y me encuentro con un error Mens. 156, Nivel 15, Estado 1,
Línea 1 Sintaxis incorrecta cerca de la palabra clave 'as'. cuando en
esa linea ni en ninguna parte del codigo tengo la clave 'as'.
El codigo fuente es sobre una consulta paginada y ordenada por
parametros.

declare @pagesize int
declare @pagenumber int
declare @IDColegiado int
declare @CodColegiado int
declare @Todos bit
declare @SQLFiltro varchar(8000)
declare @SQLOrden varchar(8000)
set @pagesize = 100
set @pagenumber = 1
set @idcolegiado = null
set @codcolegiado = null
set @todos = 1
set @sqlfiltro = null
set @sqlorden = null
DECLARE @SQL VARCHAR(2000)
DECLARE @SQL2 VARCHAR(2000)
DECLARE @SQL3 VARCHAR(2000)
DECLARE @SQL4 VARCHAR(2000)

SET @SQL = 'SELECT * FROM (SELECT
row_number() OVER (Order by ' + @SQLOrden + ') as IDRowNumber,
IDColegiado,
CodColegiado as ''Cod Colegiado'',
Numero,
Apellido1 AS ''Apellido 1'',
Apellido2 AS ''Apellido 2'',
Nombre,
CASE WHEN Telefono1 IS NULL THEN '''' ELSE Telefono1 END as
''Telefono 1'',
CASE WHEN Telefono2 IS NULL THEN '''' ELSE Telefono2 END as
''Telefono 2'',
Calle,
NumeroCalle as ''Numero Calle'',
CASE WHEN Piso IS NULL THEN '''' ELSE Piso END AS ''Piso'',
C.IDPoblacion,
CodigoPostal as ''Codigo Postal'',
Poblacion,
Provincia,
Comarca,
DNI,
FechaNacimiento AS ''Fecha Nacimiento'',
CASE WHEN Sexo = 1 THEN ''Masc'' ELSE ''Fem'' END AS ''Sexo'',
CASE WHEN CorreoElectronico IS NULL THEN '''' ELSE
CorreoElectronico END as ''Correo Electronico'','
set @sql2 = 'AlCorrientePago as ''Al Corriente Pago'',
DevolucionDeCorrespondencia as ''Devolucion de Correspondencia'',
EjercedesdeAño AS ''Ejerce desde Año'',
ExtranjeroUE as ''Extranjero UE'',
CASE WHEN C.IDPaisUE IS NULL THEN '''' ELSE C.IDPaisUE END as
''IDPaisUE'',
CASE WHEN C.IDPaisUE IS NULL THEN '''' ELSE S.CodPais END as ''Cod
Pais UE'',
CASE WHEN C.IDPaisUE IS NULL THEN '''' ELSE S.Pais END as ''Pais
UE'',
ExtranjeroNoUE as ''Extranjero No UE'',
CASE WHEN C.IDPaisNoUE IS NULL THEN '''' ELSE C.IDPaisNoUE END as
''IDPaisNoUE'',
CASE WHEN C.IDPaisNoUE IS NULL THEN '''' ELSE T.CodPais END as
''Cod Pais No UE'',
CASE WHEN C.IDPaisNoUE IS NULL THEN '''' ELSE T.Pais END as ''Pais
No UE'',
CASE WHEN TarjetaResidente IS NULL THEN '''' ELSE TarjetaResidente
END as ''Tarjeta Residente'',
CASE WHEN AltaCol IS NULL THEN '''' ELSE AltaCol END as ''Alta
Col'',
CASE WHEN FechaAltaCol IS NULL THEN '''' ELSE IDColegioAlta END AS
''IDColegioAlta'',
CASE WHEN FechaAltaCol IS NULL THEN '''' ELSE FechaAltaCol END AS
''Fecha Alta Col'',
CASE WHEN FechaAltaCol IS NULL THEN '''' ELSE CA.CodColegio END AS
''Cod Colegio Alta'',
CASE WHEN FechaAltaCol IS NULL THEN '''' ELSE CA.Colegio END AS
''Colegio Alta'',
CASE WHEN BajaCol IS NULL THEN '''' ELSE BajaCol END as ''Baja
Col'',
CASE WHEN FechaBajaCol IS NULL THEN '''' ELSE IDColegioBaja END AS
''IDColegioBaja'','
set @sql3 = 'CASE WHEN FechaBajaCol IS NULL THEN '''' ELSE
FechaBajaCol END AS ''Fecha Baja Col'',
CASE WHEN FechaBajaCol IS NULL THEN '''' ELSE CB.CodColegio END AS
''Cod Colegio Baja'',
CASE WHEN FechaBajaCol IS NULL THEN '''' ELSE CB.Colegio END AS
''Colegio Baja'',
TituloATS as ''Titulo ATS'',
CASE WHEN FechaATS IS NULL THEN '''' ELSE FechaATS END as ''Fecha
ATS'',
CASE WHEN IDEscuelaATS IS NULL THEN '''' ELSE IDEscuelaATS END AS
''IDEscuelaATS'',
CASE WHEN IDEscuelaATS IS NULL THEN '''' ELSE EATS.CodEscuela END
as ''Cod Escuela ATS'',
CASE WHEN IDEscuelaATS IS NULL THEN '''' ELSE EATS.Escuela END as
''Escuela ATS'',
TituloDUE as ''Titulo DUE'',
CASE WHEN FechaDUE IS NULL THEN '''' ELSE FechaDUE END as ''Fecha
DUE'',
CASE WHEN IDEscuelaDUE IS NULL THEN '''' ELSE IDEscuelaDUE END as
''IDEscuelaDUE'',
CASE WHEN IDEscuelaDUE IS NULL THEN '''' ELSE EDUE.CodEscuela END
as ''Cod Escuela DUE'',
CASE WHEN IDEscuelaDUE IS NULL THEN '''' ELSE EDUE.Escuela END as
''Escuela DUE'',
TituloMaster as ''Titulo Master'',
CASE WHEN FechaMaster IS NULL THEN '''' ELSE FechaMaster END as
''Fecha Master'',
CASE WHEN IDEscuelaMaster IS NULL THEN '''' ELSE IDEscuelaMaster
END as ''IDEscuelaMaster'',
CASE WHEN IDEscuelaMaster IS NULL THEN '''' ELSE EMAS.CodEscuela
END as ''Cod Escuela Master'',
CASE WHEN IDEscuelaMaster IS NULL THEN '''' ELSE EMAS.Escuela END
as ''Escuela Master'',
Doctorado,
Tesis,
CASE WHEN TituloTesis IS NULL THEN '''' ELSE TituloTesis END as
''Titulo Tesis'',
Observaciones,
Foto as ''IDFoto'',
C.Eliminado
FROM Colegiados C '
set @sql4 = 'INNER JOIN Poblaciones P ON C.IDPoblacion P.IDPoblacion AND P.Eliminado = 0
LEFT JOIN Comarcas CO ON CO.IDComarca = P.IDComarca AND CO.Eliminado
= 0
LEFT JOIN Paises S ON C.IDPaisUE = S.IDPais AND S.Eliminado = 0
LEFT JOIN Paises T ON C.IDPaisNoUE = T.IDPais AND T.Eliminado = 0
LEFT JOIN Escuelas EATS ON EATS.IDEscuela = C.IDEscuelaATS AND
EATS.Eliminado = 0
LEFT JOIN Escuelas EDUE ON EDUE.IDEscuela = C.IDEscuelaDUE AND
EDUE.Eliminado = 0
LEFT JOIN Escuelas EMAS ON EMAS.IDEscuela = C.IDEscuelaMaster AND
EMAS.Eliminado = 0
LEFT JOIN Colegios CA ON CA.IDColegio = C.IDColegioAlta AND
CA.Eliminado = 0
LEFT JOIN Colegios CB ON CB.IDColegio = C.IDColegioBaja AND
CB.Eliminado = 0
WHERE
BajaCol = CASE WHEN ' + convert(varchar(10), @Todos) + ' = 1 THEN
BajaCol ELSE 0 END AND
C.Eliminado = CASE WHEN ' + convert(varchar(10), @Todos) + ' = 1
THEN C.Eliminado ELSE 0 END AND
IDColegiado = CASE WHEN ' + convert(varchar(10), @IDColegiado) + '
IS NULL THEN IDColegiado ELSE ' + convert(varchar(10), @IDColegiado) +
' END AND
CodColegiado = CASE WHEN ' + convert(varchar(10), @CodColegiado) +
' IS NULL THEN CodColegiado ELSE ' + convert(varchar(10),
@CodColegiado) + ' END) AS X
WHERE IDRowNumber BETWEEN ' + convert(varchar(10),(@pagesize *
(@pagenumber - 1) +1)) + ' AND ' + convert(varchar(10),(@pagesize *
((@pagenumber-1) + 1)))
PRINT @SQL + @sql2 + @sql3 + @sql4
EXEC (@SQL + @sql2 + @sql3 + @sql4)

Muchas gracias de antemano.


Cristian Meneses
 

Leer las respuestas

#1 Ricardo Junquera
10/10/2008 - 08:54 | Informe spam
Hola

Parece un problema de comillas '
Puedes postear el resultado de PRINT @SQL + @sql2 + @sql3 + @sql4


Ricardo Junquera
Consultor Business Intelligence

BG&S Online Consultores
Ganadora del Premio Microsoft Business Awards 2008.
Partner de Soluciones : Satisfacción de Cliente.



"Cristian Meneses" wrote:

Buenas tardes
Tengo una consulta hecha dentro de un procedimiento almacenado, la
cual no me genera error en el procedimiento mismo, pero si al
ejecutarla. He sacado la consulta para poder debuguear el error y
probar y me encuentro con un error Mens. 156, Nivel 15, Estado 1,
Línea 1 Sintaxis incorrecta cerca de la palabra clave 'as'. cuando en
esa linea ni en ninguna parte del codigo tengo la clave 'as'.
El codigo fuente es sobre una consulta paginada y ordenada por
parametros.

declare @pagesize int
declare @pagenumber int
declare @IDColegiado int
declare @CodColegiado int
declare @Todos bit
declare @SQLFiltro varchar(8000)
declare @SQLOrden varchar(8000)
set @pagesize = 100
set @pagenumber = 1
set @idcolegiado = null
set @codcolegiado = null
set @todos = 1
set @sqlfiltro = null
set @sqlorden = null
DECLARE @SQL VARCHAR(2000)
DECLARE @SQL2 VARCHAR(2000)
DECLARE @SQL3 VARCHAR(2000)
DECLARE @SQL4 VARCHAR(2000)

SET @SQL = 'SELECT * FROM (SELECT
row_number() OVER (Order by ' + @SQLOrden + ') as IDRowNumber,
IDColegiado,
CodColegiado as ''Cod Colegiado'',
Numero,
Apellido1 AS ''Apellido 1'',
Apellido2 AS ''Apellido 2'',
Nombre,
CASE WHEN Telefono1 IS NULL THEN '''' ELSE Telefono1 END as
''Telefono 1'',
CASE WHEN Telefono2 IS NULL THEN '''' ELSE Telefono2 END as
''Telefono 2'',
Calle,
NumeroCalle as ''Numero Calle'',
CASE WHEN Piso IS NULL THEN '''' ELSE Piso END AS ''Piso'',
C.IDPoblacion,
CodigoPostal as ''Codigo Postal'',
Poblacion,
Provincia,
Comarca,
DNI,
FechaNacimiento AS ''Fecha Nacimiento'',
CASE WHEN Sexo = 1 THEN ''Masc'' ELSE ''Fem'' END AS ''Sexo'',
CASE WHEN CorreoElectronico IS NULL THEN '''' ELSE
CorreoElectronico END as ''Correo Electronico'','
set @sql2 = 'AlCorrientePago as ''Al Corriente Pago'',
DevolucionDeCorrespondencia as ''Devolucion de Correspondencia'',
EjercedesdeAño AS ''Ejerce desde Año'',
ExtranjeroUE as ''Extranjero UE'',
CASE WHEN C.IDPaisUE IS NULL THEN '''' ELSE C.IDPaisUE END as
''IDPaisUE'',
CASE WHEN C.IDPaisUE IS NULL THEN '''' ELSE S.CodPais END as ''Cod
Pais UE'',
CASE WHEN C.IDPaisUE IS NULL THEN '''' ELSE S.Pais END as ''Pais
UE'',
ExtranjeroNoUE as ''Extranjero No UE'',
CASE WHEN C.IDPaisNoUE IS NULL THEN '''' ELSE C.IDPaisNoUE END as
''IDPaisNoUE'',
CASE WHEN C.IDPaisNoUE IS NULL THEN '''' ELSE T.CodPais END as
''Cod Pais No UE'',
CASE WHEN C.IDPaisNoUE IS NULL THEN '''' ELSE T.Pais END as ''Pais
No UE'',
CASE WHEN TarjetaResidente IS NULL THEN '''' ELSE TarjetaResidente
END as ''Tarjeta Residente'',
CASE WHEN AltaCol IS NULL THEN '''' ELSE AltaCol END as ''Alta
Col'',
CASE WHEN FechaAltaCol IS NULL THEN '''' ELSE IDColegioAlta END AS
''IDColegioAlta'',
CASE WHEN FechaAltaCol IS NULL THEN '''' ELSE FechaAltaCol END AS
''Fecha Alta Col'',
CASE WHEN FechaAltaCol IS NULL THEN '''' ELSE CA.CodColegio END AS
''Cod Colegio Alta'',
CASE WHEN FechaAltaCol IS NULL THEN '''' ELSE CA.Colegio END AS
''Colegio Alta'',
CASE WHEN BajaCol IS NULL THEN '''' ELSE BajaCol END as ''Baja
Col'',
CASE WHEN FechaBajaCol IS NULL THEN '''' ELSE IDColegioBaja END AS
''IDColegioBaja'','
set @sql3 = 'CASE WHEN FechaBajaCol IS NULL THEN '''' ELSE
FechaBajaCol END AS ''Fecha Baja Col'',
CASE WHEN FechaBajaCol IS NULL THEN '''' ELSE CB.CodColegio END AS
''Cod Colegio Baja'',
CASE WHEN FechaBajaCol IS NULL THEN '''' ELSE CB.Colegio END AS
''Colegio Baja'',
TituloATS as ''Titulo ATS'',
CASE WHEN FechaATS IS NULL THEN '''' ELSE FechaATS END as ''Fecha
ATS'',
CASE WHEN IDEscuelaATS IS NULL THEN '''' ELSE IDEscuelaATS END AS
''IDEscuelaATS'',
CASE WHEN IDEscuelaATS IS NULL THEN '''' ELSE EATS.CodEscuela END
as ''Cod Escuela ATS'',
CASE WHEN IDEscuelaATS IS NULL THEN '''' ELSE EATS.Escuela END as
''Escuela ATS'',
TituloDUE as ''Titulo DUE'',
CASE WHEN FechaDUE IS NULL THEN '''' ELSE FechaDUE END as ''Fecha
DUE'',
CASE WHEN IDEscuelaDUE IS NULL THEN '''' ELSE IDEscuelaDUE END as
''IDEscuelaDUE'',
CASE WHEN IDEscuelaDUE IS NULL THEN '''' ELSE EDUE.CodEscuela END
as ''Cod Escuela DUE'',
CASE WHEN IDEscuelaDUE IS NULL THEN '''' ELSE EDUE.Escuela END as
''Escuela DUE'',
TituloMaster as ''Titulo Master'',
CASE WHEN FechaMaster IS NULL THEN '''' ELSE FechaMaster END as
''Fecha Master'',
CASE WHEN IDEscuelaMaster IS NULL THEN '''' ELSE IDEscuelaMaster
END as ''IDEscuelaMaster'',
CASE WHEN IDEscuelaMaster IS NULL THEN '''' ELSE EMAS.CodEscuela
END as ''Cod Escuela Master'',
CASE WHEN IDEscuelaMaster IS NULL THEN '''' ELSE EMAS.Escuela END
as ''Escuela Master'',
Doctorado,
Tesis,
CASE WHEN TituloTesis IS NULL THEN '''' ELSE TituloTesis END as
''Titulo Tesis'',
Observaciones,
Foto as ''IDFoto'',
C.Eliminado
FROM Colegiados C '
set @sql4 = 'INNER JOIN Poblaciones P ON C.IDPoblacion > P.IDPoblacion AND P.Eliminado = 0
LEFT JOIN Comarcas CO ON CO.IDComarca = P.IDComarca AND CO.Eliminado
= 0
LEFT JOIN Paises S ON C.IDPaisUE = S.IDPais AND S.Eliminado = 0
LEFT JOIN Paises T ON C.IDPaisNoUE = T.IDPais AND T.Eliminado = 0
LEFT JOIN Escuelas EATS ON EATS.IDEscuela = C.IDEscuelaATS AND
EATS.Eliminado = 0
LEFT JOIN Escuelas EDUE ON EDUE.IDEscuela = C.IDEscuelaDUE AND
EDUE.Eliminado = 0
LEFT JOIN Escuelas EMAS ON EMAS.IDEscuela = C.IDEscuelaMaster AND
EMAS.Eliminado = 0
LEFT JOIN Colegios CA ON CA.IDColegio = C.IDColegioAlta AND
CA.Eliminado = 0
LEFT JOIN Colegios CB ON CB.IDColegio = C.IDColegioBaja AND
CB.Eliminado = 0
WHERE
BajaCol = CASE WHEN ' + convert(varchar(10), @Todos) + ' = 1 THEN
BajaCol ELSE 0 END AND
C.Eliminado = CASE WHEN ' + convert(varchar(10), @Todos) + ' = 1
THEN C.Eliminado ELSE 0 END AND
IDColegiado = CASE WHEN ' + convert(varchar(10), @IDColegiado) + '
IS NULL THEN IDColegiado ELSE ' + convert(varchar(10), @IDColegiado) +
' END AND
CodColegiado = CASE WHEN ' + convert(varchar(10), @CodColegiado) +
' IS NULL THEN CodColegiado ELSE ' + convert(varchar(10),
@CodColegiado) + ' END) AS X
WHERE IDRowNumber BETWEEN ' + convert(varchar(10),(@pagesize *
(@pagenumber - 1) +1)) + ' AND ' + convert(varchar(10),(@pagesize *
((@pagenumber-1) + 1)))
PRINT @SQL + @sql2 + @sql3 + @sql4
EXEC (@SQL + @sql2 + @sql3 + @sql4)

Muchas gracias de antemano.


Cristian Meneses

Preguntas similares