OVH Cloud OVH Cloud

1,#QNAN ou 1,#INFdans un champ flottant

4 réponses
Avatar
Bruno M
Bonjour,
sous SQL Server 2000 (SP 3 non appliqué) j'ai un problème sérieux : une
procédure d'import en Java insère des données dans la base de données. Des
enregistrements sont créés, avec, dans des champs de type float, une
information de type texte 1,#QNAN ou 1,#INF.
Ces enregistrements provoquent des erreurs lors des select, et si j'essaie
via le Enterprise Manager de changer leur contenu, j'obtiens l'erreur
"Une exception de virgule flottante s'est produite dans le processus
utilisateur"

Normalement SQL Server ne devrait pas permettre l'insertion de valeurs non
numériques dans des champs float. Que s'est-il passé (bug de SQL Server ?) ?
Comment corriger ma base ? Comment éviter le problème à l'avenir ?

Merci pour toute aide !
Bruno

4 réponses

Avatar
Philippe T [MS]
Bonjour,

1.#INF paut apparaitre dans Analysis Services et normalement pas dans SQL
Server ??? Pouvez-vous être plus précis sur ce que vous faites en Java pour
produir cela ???

<<<

Query of a calculated member returns text such as "1.#INF or 1.#J" instead
of the number.

Cause: The formula in the calculated member attempted to divide by zero.

Solution: Change your formulas to check for possible division by zero errors
before they occur.









Phil.
________________________________________________________
Philippe TROTIN http://blogs.msdn.com/ptrotin
Microsoft Services France http://www.microsoft.com/france

"Bruno M" <Bruno wrote in message
news:
Bonjour,
sous SQL Server 2000 (SP 3 non appliqué) j'ai un problème sérieux : une
procédure d'import en Java insère des données dans la base de données. Des
enregistrements sont créés, avec, dans des champs de type float, une
information de type texte 1,#QNAN ou 1,#INF.
Ces enregistrements provoquent des erreurs lors des select, et si j'essaie
via le Enterprise Manager de changer leur contenu, j'obtiens l'erreur
"Une exception de virgule flottante s'est produite dans le processus
utilisateur"

Normalement SQL Server ne devrait pas permettre l'insertion de valeurs non
numériques dans des champs float. Que s'est-il passé (bug de SQL Server ?)


?
Comment corriger ma base ? Comment éviter le problème à l'avenir ?

Merci pour toute aide !
Bruno


Avatar
lionelp
Bonjour,

C'est que les données insérées sont out of range, cela ne peut être arriver
que lors d'appels rpc (voir via profiler les é&vènements type
rpc:starting/completed).
Le driver choisit ce type d'éxécution lorsque l'on utilise des requêtes
préparées par exemple (prepared statements) ou server side cursors.

Cordialmement,
LionelP

"Bruno M" wrote:

Bonjour,
sous SQL Server 2000 (SP 3 non appliqué) j'ai un problème sérieux : une
procédure d'import en Java insère des données dans la base de données. Des
enregistrements sont créés, avec, dans des champs de type float, une
information de type texte 1,#QNAN ou 1,#INF.
Ces enregistrements provoquent des erreurs lors des select, et si j'essaie
via le Enterprise Manager de changer leur contenu, j'obtiens l'erreur
"Une exception de virgule flottante s'est produite dans le processus
utilisateur"

Normalement SQL Server ne devrait pas permettre l'insertion de valeurs non
numériques dans des champs float. Que s'est-il passé (bug de SQL Server ?) ?
Comment corriger ma base ? Comment éviter le problème à l'avenir ?

Merci pour toute aide !
Bruno


Avatar
Bruno M
Bonjour,
Merci beaucoup pour cette réponse, qui me donne une piste très sérieuse pour
résoudre le pb initial. Il est probable en effet que le driver JDBC fait un
appel en RPC au serveur, et qu'il me faut trouver dans quel cas j'ai un
flottant out of range.

Autre question : ai-je un moyen simple de rechercher et corriger les
enregistrements ainsi endommagés ? Un "select" termine en erreur, il me faut
actuellement les chercher "à la main" via Enterprise Manager, ce qui sur des
centaines de milliers d'enregistrements est quasiment infaisable.

Cordialement
Bruno

"" wrote:

Bonjour,

C'est que les données insérées sont out of range, cela ne peut être arriver
que lors d'appels rpc (voir via profiler les é&vènements type
rpc:starting/completed).
Le driver choisit ce type d'éxécution lorsque l'on utilise des requêtes
préparées par exemple (prepared statements) ou server side cursors.

Cordialmement,
LionelP

"Bruno M" wrote:

> Bonjour,
> sous SQL Server 2000 (SP 3 non appliqué) j'ai un problème sérieux : une
> procédure d'import en Java insère des données dans la base de données. Des
> enregistrements sont créés, avec, dans des champs de type float, une
> information de type texte 1,#QNAN ou 1,#INF.
> Ces enregistrements provoquent des erreurs lors des select, et si j'essaie
> via le Enterprise Manager de changer leur contenu, j'obtiens l'erreur
> "Une exception de virgule flottante s'est produite dans le processus
> utilisateur"
>
> Normalement SQL Server ne devrait pas permettre l'insertion de valeurs non
> numériques dans des champs float. Que s'est-il passé (bug de SQL Server ?) ?
> Comment corriger ma base ? Comment éviter le problème à l'avenir ?
>
> Merci pour toute aide !
> Bruno


Avatar
lionelp
Bonjour,

peut-être en faisant:
SET ARITHIGNORE ON (ou SET ARITHABORTH OFF)
go
select * into new_float_table
go
select * from float_table
where key not in (select key from new_float_table)

De cette manière on doit pouvoir filtrer les données incorrectes puis les
identifier.

Cordialement,
LionelP

"Bruno M" wrote:

Bonjour,
Merci beaucoup pour cette réponse, qui me donne une piste très sérieuse pour
résoudre le pb initial. Il est probable en effet que le driver JDBC fait un
appel en RPC au serveur, et qu'il me faut trouver dans quel cas j'ai un
flottant out of range.

Autre question : ai-je un moyen simple de rechercher et corriger les
enregistrements ainsi endommagés ? Un "select" termine en erreur, il me faut
actuellement les chercher "à la main" via Enterprise Manager, ce qui sur des
centaines de milliers d'enregistrements est quasiment infaisable.

Cordialement
Bruno

"" wrote:

> Bonjour,
>
> C'est que les données insérées sont out of range, cela ne peut être arriver
> que lors d'appels rpc (voir via profiler les é&vènements type
> rpc:starting/completed).
> Le driver choisit ce type d'éxécution lorsque l'on utilise des requêtes
> préparées par exemple (prepared statements) ou server side cursors.
>
> Cordialmement,
> LionelP
>
> "Bruno M" wrote:
>
> > Bonjour,
> > sous SQL Server 2000 (SP 3 non appliqué) j'ai un problème sérieux : une
> > procédure d'import en Java insère des données dans la base de données. Des
> > enregistrements sont créés, avec, dans des champs de type float, une
> > information de type texte 1,#QNAN ou 1,#INF.
> > Ces enregistrements provoquent des erreurs lors des select, et si j'essaie
> > via le Enterprise Manager de changer leur contenu, j'obtiens l'erreur
> > "Une exception de virgule flottante s'est produite dans le processus
> > utilisateur"
> >
> > Normalement SQL Server ne devrait pas permettre l'insertion de valeurs non
> > numériques dans des champs float. Que s'est-il passé (bug de SQL Server ?) ?
> > Comment corriger ma base ? Comment éviter le problème à l'avenir ?
> >
> > Merci pour toute aide !
> > Bruno