Error en un SP que hace un select a una vista indizada.

22/03/2005 - 11:00 por José Antonio | Informe spam
Hola, me he decidido a utilizar vistas indexadas porque las he probado y he
llegadoa la conclusión que en la mayoria de los casos donde se debe de
acumular informacion son una buena opcion, mas facil que utilizar triggers y
crear una tabla para guardar los acumulados.

Pero me encuentro con problemas de opciones que soluciono poco a poco.

A este error que os planteo no encuentro una solución.

Para que todas las conexiones que acceden a la base de datos tengan las
mismas opciones, estas se las he puesto por defecto a la propia base de
datos con

ALTER DATABASE GESTION
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
SET ARITHABORT ON
SET CONCAT_NULL_YIELDS_NULL ON
SET QUOTED_IDENTIFIER ON
SET NUMERIC_ROUNDABORT OFF.

Sin embargo al ejecutar los procedimiento almacenados me da el siguiente
error y no consigo solucinarlo, ni borrando el procedimiento y volviendolo a
hacer.

Este es el error y el uno de los select que hago en los SP.

Utilizo el with (noexpand) por que me he dado cuenta que si no se utliza,
aunque la vista tenga indices, sql server accede a la tabla en vez de a la
vista, no considerandola como vista indizada.

Servidor: mensaje 1934, nivel 16, estado 1, procedimiento CG_ACUMULADOS,
línea 9
[Microsoft][ODBC SQL Server Driver][SQL Server]Error de SELECT porque las
siguientes opciones SET tienen una configuración incorrecta: 'ANSI_NULLS.,
QUOTED_IDENTIFIER'.

SELECT CASE WHEN GROUPING(MES)=1 THEN 15 ELSE MES END AS MES,SUM(DEBE)AS
DEBE,SUM(HABER) AS HABER,SUM(SALDO) AS SALDO,CAST(0 AS DECIMAL) AS
ACUDEBE,CAST(0 AS DECIMAL) AS ACUHABER,CAST(0 AS DECIMAL) AS ACUSALDO FROM
VT_MENSUAL WITH (NOEXPAND) WHERE EMPRESA=@EMPRESA AND CUENTA=@CUENTA AND
MES>=@DESDEMES AND MES<=@HASTAMES GROUP BY MES WITH ROLLUP

Necesito su ayuda.

Saludos.

Preguntas similare

Leer las respuestas

#6 Alejandro Mesa
22/03/2005 - 14:59 | Informe spam
José Antonio,

OK, cambia el setting de ANSI_NULLS y ejecuta el script para actualizar el
procedimiento. Estos valores se graban junto con el sp cuando este se crea y
son invocados cada vez que ejecutas el procedimiento.

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_NULLS ON
GO

alter procedure ...
go

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_NULLS ON
GO


AMB

"José Antonio" wrote:

Las opciones que tiene el procedimiento al principio son estas:
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS OFF
GO

No entiendo por que no coje las de la base de datos.

"Alejandro Mesa" escribió en el
mensaje news:
> José Antonio,
>
> Ve a Query Analyzer, localiza el procedimiento en question, has click
> derecho sobre el y escoje la opcion de editarlo. Cuales son los seteos de
> ANSI_NULLS y QUOTED_IDENTIFIER que aparecen asociados al procedimineto?
>
>
> AMB
>
> "José Antonio" wrote:
>
>> Hola, me he decidido a utilizar vistas indexadas porque las he probado y
>> he
>> llegadoa la conclusión que en la mayoria de los casos donde se debe de
>> acumular informacion son una buena opcion, mas facil que utilizar
>> triggers y
>> crear una tabla para guardar los acumulados.
>>
>> Pero me encuentro con problemas de opciones que soluciono poco a poco.
>>
>> A este error que os planteo no encuentro una solución.
>>
>> Para que todas las conexiones que acceden a la base de datos tengan las
>> mismas opciones, estas se las he puesto por defecto a la propia base de
>> datos con
>>
>> ALTER DATABASE GESTION
>> SET ANSI_NULLS ON
>> SET ANSI_PADDING ON
>> SET ANSI_WARNINGS ON
>> SET ARITHABORT ON
>> SET CONCAT_NULL_YIELDS_NULL ON
>> SET QUOTED_IDENTIFIER ON
>> SET NUMERIC_ROUNDABORT OFF.
>>
>> Sin embargo al ejecutar los procedimiento almacenados me da el siguiente
>> error y no consigo solucinarlo, ni borrando el procedimiento y
>> volviendolo a
>> hacer.
>>
>> Este es el error y el uno de los select que hago en los SP.
>>
>> Utilizo el with (noexpand) por que me he dado cuenta que si no se utliza,
>> aunque la vista tenga indices, sql server accede a la tabla en vez de a
>> la
>> vista, no considerandola como vista indizada.
>>
>> Servidor: mensaje 1934, nivel 16, estado 1, procedimiento CG_ACUMULADOS,
>> línea 9
>> [Microsoft][ODBC SQL Server Driver][SQL Server]Error de SELECT porque las
>> siguientes opciones SET tienen una configuración incorrecta:
>> 'ANSI_NULLS.,
>> QUOTED_IDENTIFIER'.
>>
>> SELECT CASE WHEN GROUPING(MES)=1 THEN 15 ELSE MES END AS MES,SUM(DEBE)AS
>> DEBE,SUM(HABER) AS HABER,SUM(SALDO) AS SALDO,CAST(0 AS DECIMAL) AS
>> ACUDEBE,CAST(0 AS DECIMAL) AS ACUHABER,CAST(0 AS DECIMAL) AS ACUSALDO
>> FROM
>> VT_MENSUAL WITH (NOEXPAND) WHERE EMPRESA=@EMPRESA AND CUENTA=@CUENTA AND
>> MES>=@DESDEMES AND MES<=@HASTAMES GROUP BY MES WITH ROLLUP
>>
>> Necesito su ayuda.
>>
>> Saludos.
>>
>>
>>



Respuesta Responder a este mensaje
#7 Alejandro Mesa
22/03/2005 - 15:15 | Informe spam
José Antonio,

Tendras que alterar todos los sps, pues como te dije, estas opciones se
salvan cuando estos se crean.


AMB


"José Antonio" wrote:

Me he datos cuenta que todos los SP que modifico se ponen con la opcion
ANSI_NULLS a OFF.

Como puedo hacer para que estas opciones se queden fijas para todas las
conexiones?

"José Antonio" escribió en el
mensaje news:Oz$
> Las opciones que tiene el procedimiento al principio son estas:
> SET QUOTED_IDENTIFIER ON
> GO
> SET ANSI_NULLS OFF
> GO
>
> No entiendo por que no coje las de la base de datos.
>
> "Alejandro Mesa" escribió en el
> mensaje news:
>> José Antonio,
>>
>> Ve a Query Analyzer, localiza el procedimiento en question, has click
>> derecho sobre el y escoje la opcion de editarlo. Cuales son los seteos de
>> ANSI_NULLS y QUOTED_IDENTIFIER que aparecen asociados al procedimineto?
>>
>>
>> AMB
>>
>> "José Antonio" wrote:
>>
>>> Hola, me he decidido a utilizar vistas indexadas porque las he probado y
>>> he
>>> llegadoa la conclusión que en la mayoria de los casos donde se debe de
>>> acumular informacion son una buena opcion, mas facil que utilizar
>>> triggers y
>>> crear una tabla para guardar los acumulados.
>>>
>>> Pero me encuentro con problemas de opciones que soluciono poco a poco.
>>>
>>> A este error que os planteo no encuentro una solución.
>>>
>>> Para que todas las conexiones que acceden a la base de datos tengan las
>>> mismas opciones, estas se las he puesto por defecto a la propia base de
>>> datos con
>>>
>>> ALTER DATABASE GESTION
>>> SET ANSI_NULLS ON
>>> SET ANSI_PADDING ON
>>> SET ANSI_WARNINGS ON
>>> SET ARITHABORT ON
>>> SET CONCAT_NULL_YIELDS_NULL ON
>>> SET QUOTED_IDENTIFIER ON
>>> SET NUMERIC_ROUNDABORT OFF.
>>>
>>> Sin embargo al ejecutar los procedimiento almacenados me da el siguiente
>>> error y no consigo solucinarlo, ni borrando el procedimiento y
>>> volviendolo a
>>> hacer.
>>>
>>> Este es el error y el uno de los select que hago en los SP.
>>>
>>> Utilizo el with (noexpand) por que me he dado cuenta que si no se
>>> utliza,
>>> aunque la vista tenga indices, sql server accede a la tabla en vez de a
>>> la
>>> vista, no considerandola como vista indizada.
>>>
>>> Servidor: mensaje 1934, nivel 16, estado 1, procedimiento CG_ACUMULADOS,
>>> línea 9
>>> [Microsoft][ODBC SQL Server Driver][SQL Server]Error de SELECT porque
>>> las
>>> siguientes opciones SET tienen una configuración incorrecta:
>>> 'ANSI_NULLS.,
>>> QUOTED_IDENTIFIER'.
>>>
>>> SELECT CASE WHEN GROUPING(MES)=1 THEN 15 ELSE MES END AS MES,SUM(DEBE)AS
>>> DEBE,SUM(HABER) AS HABER,SUM(SALDO) AS SALDO,CAST(0 AS DECIMAL) AS
>>> ACUDEBE,CAST(0 AS DECIMAL) AS ACUHABER,CAST(0 AS DECIMAL) AS ACUSALDO
>>> FROM
>>> VT_MENSUAL WITH (NOEXPAND) WHERE EMPRESA=@EMPRESA AND CUENTA=@CUENTA AND
>>> MES>=@DESDEMES AND MES<=@HASTAMES GROUP BY MES WITH ROLLUP
>>>
>>> Necesito su ayuda.
>>>
>>> Saludos.
>>>
>>>
>>>
>
>



Respuesta Responder a este mensaje
#8 José Antonio
22/03/2005 - 16:37 | Informe spam
Muchas gracias por la información.

Saludos.
"Alejandro Mesa" escribió en el
mensaje news:
José Antonio,

Tendras que alterar todos los sps, pues como te dije, estas opciones se
salvan cuando estos se crean.


AMB


"José Antonio" wrote:

Me he datos cuenta que todos los SP que modifico se ponen con la opcion
ANSI_NULLS a OFF.

Como puedo hacer para que estas opciones se queden fijas para todas las
conexiones?

"José Antonio" escribió en el
mensaje news:Oz$
> Las opciones que tiene el procedimiento al principio son estas:
> SET QUOTED_IDENTIFIER ON
> GO
> SET ANSI_NULLS OFF
> GO
>
> No entiendo por que no coje las de la base de datos.
>
> "Alejandro Mesa" escribió en
> el
> mensaje news:
>> José Antonio,
>>
>> Ve a Query Analyzer, localiza el procedimiento en question, has click
>> derecho sobre el y escoje la opcion de editarlo. Cuales son los seteos
>> de
>> ANSI_NULLS y QUOTED_IDENTIFIER que aparecen asociados al
>> procedimineto?
>>
>>
>> AMB
>>
>> "José Antonio" wrote:
>>
>>> Hola, me he decidido a utilizar vistas indexadas porque las he
>>> probado y
>>> he
>>> llegadoa la conclusión que en la mayoria de los casos donde se debe
>>> de
>>> acumular informacion son una buena opcion, mas facil que utilizar
>>> triggers y
>>> crear una tabla para guardar los acumulados.
>>>
>>> Pero me encuentro con problemas de opciones que soluciono poco a
>>> poco.
>>>
>>> A este error que os planteo no encuentro una solución.
>>>
>>> Para que todas las conexiones que acceden a la base de datos tengan
>>> las
>>> mismas opciones, estas se las he puesto por defecto a la propia base
>>> de
>>> datos con
>>>
>>> ALTER DATABASE GESTION
>>> SET ANSI_NULLS ON
>>> SET ANSI_PADDING ON
>>> SET ANSI_WARNINGS ON
>>> SET ARITHABORT ON
>>> SET CONCAT_NULL_YIELDS_NULL ON
>>> SET QUOTED_IDENTIFIER ON
>>> SET NUMERIC_ROUNDABORT OFF.
>>>
>>> Sin embargo al ejecutar los procedimiento almacenados me da el
>>> siguiente
>>> error y no consigo solucinarlo, ni borrando el procedimiento y
>>> volviendolo a
>>> hacer.
>>>
>>> Este es el error y el uno de los select que hago en los SP.
>>>
>>> Utilizo el with (noexpand) por que me he dado cuenta que si no se
>>> utliza,
>>> aunque la vista tenga indices, sql server accede a la tabla en vez de
>>> a
>>> la
>>> vista, no considerandola como vista indizada.
>>>
>>> Servidor: mensaje 1934, nivel 16, estado 1, procedimiento
>>> CG_ACUMULADOS,
>>> línea 9
>>> [Microsoft][ODBC SQL Server Driver][SQL Server]Error de SELECT porque
>>> las
>>> siguientes opciones SET tienen una configuración incorrecta:
>>> 'ANSI_NULLS.,
>>> QUOTED_IDENTIFIER'.
>>>
>>> SELECT CASE WHEN GROUPING(MES)=1 THEN 15 ELSE MES END AS
>>> MES,SUM(DEBE)AS
>>> DEBE,SUM(HABER) AS HABER,SUM(SALDO) AS SALDO,CAST(0 AS DECIMAL) AS
>>> ACUDEBE,CAST(0 AS DECIMAL) AS ACUHABER,CAST(0 AS DECIMAL) AS ACUSALDO
>>> FROM
>>> VT_MENSUAL WITH (NOEXPAND) WHERE EMPRESA=@EMPRESA AND CUENTA=@CUENTA
>>> AND
>>> MES>=@DESDEMES AND MES<=@HASTAMES GROUP BY MES WITH ROLLUP
>>>
>>> Necesito su ayuda.
>>>
>>> Saludos.
>>>
>>>
>>>
>
>



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida