|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | |
|
Membre du Club
![]() Inscription : octobre 2003 Messages : 181 ![]() |
Bonjour,
J'ai un petit problème tout bête mais qui commence à m'énerver car je n'en comprend pas tout les tentants et aboutissants. Dans une requête de mise à jour d'une procédure stockée, je souhaite affecter à une colonne de type DATETIME la valeur de la date-heure courante, sans la précision milli-secondes (donc qui sont nulles). Pour ce faire, j'ai commencé à utiliser le code suivant : qui passe avec l'analyseur de requête mais qui me provoque une erreur avec le SQL Agent. J'ai ensuite essayé naivement celui-ci qui ne passe ni avec l'Analyseur de requête, ni avec le SQL Agent. Dans le procédure stockée, j'ai essayé de jouer avec SET DATEFORMAT, ce qui m'entraîne d'autres erreurs ailleurs dans le code de la PS. Les erreurs sont du style : Citation:
Mais j'ai besoin des secondes et les milli-secondes doivent être obligatoirement nulles. J'ai trouvé plein d'infos sur le sujet, mais rien qui n'arrive à éclairer ma lanterne. Merci d'avance pour votre aide. |
|
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Bonjour,
Le type DATETIME stocke les millisecondes, que vous le vouliez ou non Il me semble que vous pourriez utiliser DATETIME2(0), pour votre besoin, mais je ne suis pas sur de l'avoir bien compris... Pourquoi ne voulez vous pas stocker les millisecondes (faites vous des comparaisons d'heure, et vous ne voulez pas que les millisecondes soient prise en compte dans la comparaison ?) Si c'est pour de l'affichage, vous pouvez effectuer votre CONVERT dans votre requete SELECT |
|
|
00
|
|
|
#3 |
|
Membre du Club
![]() Inscription : octobre 2003 Messages : 181 ![]() |
Bonjour,
Oui le but n'est pas de créer une nouveau type. C'est juste que le progiciel qui attaque ces données a été configuré pour ne prendre en compte que les secondes. Les milli-secondes lui posent des problèmes. Donc au lieu d'avoir une date du type 2011-03-23 15:21:46.238, il faut que je la transforme en 2011-03-23 15:21:46.000. Il me paraissait plus immédiat de procéder avec une conversion basée sur une chaîne de caractères plutôt qu'une manipulation de la date a format numérique. De plus le serveur est sous Windows SQL 2000, donc les seuls formats de date sont DATETIME et SMALLDATETIME |
|
|
00
|
|
|
#4 | |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
En fait, votre premier code devrait être bon !
Citation:
dans quel contexte l'utilisez-vous ? |
|
|
|
00
|
|
|
#5 | ||
![]() ![]() |
Avec une double conversion pour faire sauter la précision des millisecondes :
Code :
__________________
Email : http://scr.im/waldar |
||
|
00
|
|
|
#6 |
|
Membre du Club
![]() Inscription : octobre 2003 Messages : 181 ![]() |
Pour les erreurs, j'ai donné un exemple ci-dessus qui je pense correspond à la totalité des messages d'erreur (une variante entre CHAR et VARCHAR).
Quant au contexte du SQL Agent, je viens de regarder : Il démarre sur le compte Local System Quant à la connexion, il était sur une authentification Windows que je viens de changer en authentification SQL, avec la même connexion que l'Analyseur. Je fais des test et un retour ensuite. |
|
|
00
|
|
|
#7 | |||
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
désolé, je me suis mal exprimé, quand je demandais le contexte, c'était surtout pour savoir dans quel ordre SQL le CONVERT etait utilsé
(dans un SELECT, dans un UPDATE..SELECT, dans une SP avec SET @VAR = CONVERT... ?) En fait ce serait bien de donner le script complet, car par exemple, à partir de votre premier code, ceci fonctionne bien : Code SQL :
Citation:
|
|||
|
|
00
|
|
|
#8 | |
|
Membre du Club
![]() Inscription : octobre 2003 Messages : 181 ![]() |
J'ai repris mes tests.
En restant avec Agent SQL configuré avec authentification Windows : Plante --> msg d'erreur : Citation:
C'est donc bien une question de contexte de connexion (donc d'utilisateur), mais je ne comprend pas exactement lequel. Tiens, une page spécial conversion format de date : http://www.sql-server-helper.com/tips/date-formats.aspx |
|
|
|
00
|
|
|
#9 | |
|
Membre du Club
![]() Inscription : octobre 2003 Messages : 181 ![]() |
Une question :
Si l'Agent SQL démarre sur le compte LOCAL SYSTEM et que l'Agent SQL soit configurée pour s'authentifier avec le compte Windows, sur quelle connexion se connecte l'Agent SQL ??? ET donc quels droits lui sont associés ??? [Edit] J'ai peut-être un indice. Sur ce serveur SQL Server 200, il existe une connexion appelée BUILTIN/Administrateurs qui gère une authentification Windows. Mais sur le domaine BUILTIN .... C'est quoi ce domaine ? Pas le nôtre en tout cas ! La seule différence entre cette connexion et celle que j'utilise usuellement (authentification SQL), c'est la langue : > Authentification Windows --> French > Authentification SQL --> English Je pense que la différence de traitement des dates vient de là. [Edit] Oui ça a l'air d'être cela. Voici ce que j'ai trouvé dans l'aide : Citation:
|
|
|
|
00
|
|
|
#10 |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 667 ![]() |
Bonjour,
Ben moi en fait j'aurai fait un CAST en varbinary, que j'aurai casté en uniqueidentifier, pour le caster ensuite en varchar(50), prendre un SUBSTRING ou un RIGHT des millisecondes et le remplacer par '000' ... Hé les gars, vous connaissez DATEADD() ? Code :
DATEADD(millisecond, -DATEPART(millisecond, GETDATE()), GETDATE()) @++
__________________
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 |
|
20
|
|
|
#11 |
|
Membre du Club
![]() Inscription : octobre 2003 Messages : 181 ![]() |
Je me disais aussi ......
![]() Merci Elsuket pour cette solution bien plus intelligente et élégante que mes tripatouillages !!!!!! |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com