IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

Requêtes dynamiques et date


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2014
    Messages
    744
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2014
    Messages : 744
    Par défaut Requêtes dynamiques et date
    Bonjour.
    Je n'arrive pas à construire ma requête correctement, j'obtiens le message :
    messsages : Msg 102, Level 15, State 1, Line 2
    Incorrect syntax near '12'.
    lorsque j'execute ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    DECLARE @query nvarchar(500), @nom_table_purge nvarchar(500), @nom_colonne_purge nvarchar(500), 
    @date_Purge_datetime datetime
     
    SET @nom_table_purge = 'FT_delegation'
    SET @nom_colonne_purge = 'end_date' --est au format datetime
    SET @date_Purge_datetime = CAST(DATEADD(m, -8, getdate())AS datetime)
     
    --Solution 1
    SET @query = N'SELECT COUNT (*) FROM dbo.' + @nom_table_purge + '
    			WHERE ' + @nom_colonne_purge + ' < ' + CAST(@date_Purge_datetime AS NVARCHAR)
     
    --Solution 2
    SET @query = N'SELECT COUNT (*) FROM dbo.' + @nom_table_purge + '
    WHERE ' + @nom_colonne_purge + ' < ' + CAST(@date_Purge_datetime AS NVARCHAR)
     
    EXEC (@query );
    Je ne sais pas quoi faire de mon paramètre @date_Purge_datetime (par ex Jan 12 2016 5:44PM) alors que le end_date est par ex 2015-07-31 00:00:00.000


    Merci de votre aide, je me noie.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 134
    Par défaut
    Quand on écrit une requête "dynamique" le plus sûr est de commencer par l'écrire entièrement en dur (sans variables), puis de remplacer petit à petit chaque portion dynamique du code par la variable correspondante.
    A l'inverse, pour la tester et comprendre où elle pêche, il faut l'afficher avant de l'exécuter. Et souvent l'erreur devient évidente
    Dans ton cas, il manque assurément quelque chose pour encadrer ta valeur de date, voire la convertir...
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 998
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 998
    Billets dans le blog
    6
    Par défaut
    Le type DATETIME (obsolète depuis la version 2008) utilise par défaut le format ISO court qui est : 'AAAAMMJJ hh:mm;ss.nnn' pour exprimer une date heure sous forme littérale.
    Le type DATETIME2 (remplaçant du type DATETIME depuis la version 2008) utilise par défaut le format ISO long qui est : 'AAAA-MM-JJ hh:mm;ss.nnn' pour exprimer une date heure sous forme littérale.
    Vous avez utilisé du DATETIME comme type avec le format du DATETIME2...

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2014
    Messages
    744
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2014
    Messages : 744
    Par défaut
    Bonjour et merci de vos réponses.
    @al1_24 : oui je les ai écrites en dur d'abord.
    @SQLpro Je vais chercher comment convertir mes dates, je savais qu'il fallait chercher par là, j’ignorai les problèmes de passage de DATETIME à DATETIME2, je n'ai pas le choix pour les données de départ.

  5. #5
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 134
    Par défaut
    As-tu essayé d'afficher ta requête avant de l'exécuter ?
    Ce serait - à mon avis - très utile à la compréhension du message d'erreur associé à l'exécution.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2014
    Messages
    744
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2014
    Messages : 744
    Par défaut
    Bonjour.
    Oui j'ai essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT COUNT (*) FROM dbo.FT_delegation
    			WHERE end_date < Jan 13 2016  9:57AM
    donne :
    Msg 102, Level 15, State 1, Line 2
    Incorrect syntax near '13'.

  7. #7
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 134
    Par défaut
    Et comme ça, ça ne fonctionnerait pas mieux ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT COUNT (*) FROM dbo.FT_delegation
    			WHERE end_date < CAST('Jan 13 2016  9:57AM' AS datetime)
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Oracle9i] Requête dynamique et date
    Par Drizzt [Drone38] dans le forum SQL
    Réponses: 7
    Dernier message: 22/04/2008, 10h15
  2. [pb requête sql] Requête dynamique
    Par viny dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 15/09/2005, 12h31
  3. Erreur de conversion et requête dynamique dans une procédure
    Par franculo_caoulene dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 01/08/2005, 15h12
  4. [Procs stockées] [Débutant] Requête dynamique
    Par stailer dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 25/04/2005, 14h29
  5. Requête dynamique en pagination
    Par pascal_fluck@hotmail.com dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 30/03/2005, 16h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo