Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/05/2011, 21h02   #1
Membre actif
 
Inscription : septembre 2007
Messages : 630
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 630
Points : 165
Points : 165
Par défaut Pb avec un SET pour une variable DATETIME

Bonjour,
Voici le début de ma requête SELECT. J'ai un pb avec les variables.
J'ai essayé 2 syntaxes différentes mais j'obtiens la même erreur.
Citation:
Msg*242, Niveau*16, État*3, Ligne*3
La conversion d'un type de données varchar en type de données datetime a créé une valeur hors limites.

Code :
1
2
3
4
DECLARE @P1 smallint,@P2 smallint,@P3 datetime,@P4 smallint,@P5 datetime
 
SET @P3 = (cast('2011-05-22 00:00:00' AS DATETIME) );
SET @P5 = '2011-04-22 00:00:00';
Auriez-vous une idée de ce qui ne va pas ?

Merci
Thibault
tibofo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2011, 22h27   #2
Expert Confirmé
 
Avatar de 7gyY9w1ZY6ySRgPeaefZ
 
Homme
dba
Inscription : juillet 2007
Messages : 2 520
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : dba

Informations forums :
Inscription : juillet 2007
Messages : 2 520
Points : 3 967
Points : 3 967
Non, pas d'idée car votre code me retourne :
Code :
Command(s) completed successfully.
Je parierais sur une coquille du genre une année 20011.

Cela dit, donnez-nous votre vraie code d'origine et on pourra chercher vraiment.
C'est quoi votre version en passant?
__________________
les règles du forum - mode d'emploi du forum
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs.
(Rappel : "ça ne marche pas" n'est pas un message d'erreur)
JE NE RÉPONDS PAS aux questions techniques par message privé.
Écrire en français sur un forum est une marque minimale de respect.
7gyY9w1ZY6ySRgPeaefZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2011, 23h56   #3
Membre éprouvé
 
Homme Hamid MIRA
Ingénieur développement logiciels
Inscription : septembre 2003
Messages : 177
Détails du profil
Informations personnelles :
Nom : Homme Hamid MIRA
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2003
Messages : 177
Points : 413
Points : 413
Pour éviter définitivement ce genre d'erreur ou problème, prends l'habitude d'utiliser le format ISO8601
yyyy-mm-ddThh:mm:ss[.mmm]

Le format ISO8601 présente un avantage de taille puisqu'il s'agit d'une norme internationale. De plus, les valeurs datetime spécifiées dans ce format ne sont jamais ambiguës. Ce format n'est pas affecté par les paramètres SET DATEFORMAT ou SET LANGUAGE.

Pour revenir à ton exemple, tu peux le réécrire comme indiqué ci-dessous :
Code :
1
2
3
4
DECLARE @P1 smallint, @P2 smallint,@P3 datetime,@P4 smallint,@P5 datetime
 
SET @P3 = '2011-05-22T00:00:00'; 
SET @P5 = '2011-04-22T00:00:00';
A+
hmira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2011, 12h46   #4
Membre Expert
 
Homme Etienne ZINZINDOHOUE
Ingénieur développement
Inscription : mars 2010
Messages : 1 139
Détails du profil
Informations personnelles :
Nom : Homme Etienne ZINZINDOHOUE
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Ingénieur développement
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2010
Messages : 1 139
Points : 2 467
Points : 2 467
Envoyer un message via Yahoo à zinzineti
Citation:
Envoyé par hmira Voir le message
Pour éviter définitivement ce genre d'erreur ou problème, prends l'habitude d'utiliser le format ISO8601
yyyy-mm-ddThh:mm:ss[.mmm]

Le format ISO8601 présente un avantage de taille puisqu'il s'agit d'une norme internationale. De plus, les valeurs datetime spécifiées dans ce format ne sont jamais ambiguës. Ce format n'est pas affecté par les paramètres SET DATEFORMAT ou SET LANGUAGE.

A+

J'ai abordé le sujet ici
__________________
Etienne ZINZINDOHOUE
Billets-Articles
zinzineti est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2011, 13h09   #5
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 668
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2005
Messages : 4 668
Points : 8 718
Points : 8 718
Bonjour,

J'allais répondre ce qu'à écrit zinzineti à la fin de son billet : sans les tirets, cela fonctionne tout le temps, quel que soit le langage.

En ce qui concerne la norme, elle autorise les deux représentations si j'en crois cet article (qui n'est pas dans son équivalent français):

Citation:
the standard allows both the YYYY-MM-DD and YYYYMMDD formats for complete calendar date representations
@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2011, 13h46   #6
Membre chevronné
 
Inscription : juillet 2006
Messages : 1 194
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 1 194
Points : 746
Points : 746
Citation:
Envoyé par tibofo Voir le message
Bonjour,
Voici le début de ma requête SELECT. J'ai un pb avec les variables.
J'ai essayé 2 syntaxes différentes mais j'obtiens la même erreur.



Code :
1
2
3
4
DECLARE @P1 smallint,@P2 smallint,@P3 datetime,@P4 smallint,@P5 datetime
 
SET @P3 = (cast('2011-05-22 00:00:00' AS DATETIME) );
SET @P5 = '2011-04-22 00:00:00';
Auriez-vous une idée de ce qui ne va pas ?

Merci
Thibault
Si

SET @P3 = (cast('2011-05-05 00:00:00' AS DATETIME) );

fonctionne, c'est que dans votre configuration le second nombre est le jour et non le mois.
Sergejack est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2011, 19h29   #7
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 953
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 953
Points : 17 773
Points : 17 773
DATETIME ne supporte que la syntaxe ISO courte (par ce que il a été créé il y a longtemps du temps de Sybase).
DATETIME2 supporte la syntaxe ISO longue.

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2011, 08h32   #8
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 668
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2005
Messages : 4 668
Points : 8 718
Points : 8 718
Ce que je fais assez souvent :

Code :
DECLARE @toto datetime = '20110502 18:12:25.333'
Fonctionne parfaitement, quel que soit le langage de la session.

@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h58.


 
 
 
 
Partenaires

Hébergement Web