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 :

Msg 4145 sur SQL SERVER 2008 R


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Sopotel
    Inscrit en
    Juillet 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Sopotel
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2011
    Messages : 33
    Par défaut Msg 4145 sur SQL SERVER 2008 R
    Bonjour,
    Je veux parcourir ma table et supprimer les doublons.
    J'ai un message d'erreur lorsque j'exécute la requête ci-dessous:

    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
    17
    18
    19
    20
    21
    22
    DELETE FROM MfProd 
    WHERE COLUID < ANY (SELECT COLUID
    					FROM MfProd T2
    					WHERE COLUID <> T2.COLUID
    					AND MfProd.id = T2.id
    					AND MfProd.Dates = T2.Dates
    					AND MfProd.Timer Bagscan = T2.Timer Bagscan
    					AND MfProd.Nom machine = T2.Nom machine
    					AND MfProd.IP machine = T2.IP machine
    					AND MfProd.Timer Tag = T2.Timer Tag
    					AND MfProd.Tag = T2.Tag
    					AND MfProd.Timer Mfdec = T2.Timer Mfdec
    					AND MfProd.MfDec = T2.MfDec
    					AND MfProd.Timer SendB = T2.Timer SendB
    					AND MfProd.Nom du poste = T2.Nom du poste
    					AND MfProd.IP du poste = T2.IP du poste
    					AND MfProd.Numéro de controle = T2.Numéro de controle
    					AND MfProd.Timer WsRcv = T2.Timer WsRcv
    					AND MfProd.Numéro identification = T2.Numéro identification
    					AND MfProd.Timer Wssho = T2.Timer Wssho
    					AND MfProd.timer WsDec= T2.Timer WsDec
    					AND MfProd.WsDec = T2.WsDec)
    Msg*4145, Niveau*15, État*1, Ligne*7
    Expression de type non booléen spécifiée dans un contexte où une condition est attendue, près de 'Bagscan'.
    J'ai essayé de résoudre mon problème en cherchant sur Google, mais j'obtiens pas le résultat que je souhaite.

    Je vous remercie de votre aide

  2. #2
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Quand tu as des objets (très mal nommés) qui contiennent des espaces, il faut les mettre entre crochets lorsque tu les utilises depuis une requête :

    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
    17
    18
    19
    20
    21
    22
    23
    24
     
    DELETE FROM MfProd 
    WHERE COLUID < ANY (SELECT COLUID
    FROM MfProd T2
    WHERE COLUID <> T2.COLUID
    AND MfProd.id = T2.id
    AND MfProd.Dates = T2.Dates
    AND MfProd.[Timer Bagscan] = T2.[Timer Bagscan]
    AND MfProd.[Nom machine] = T2.[Nom machine]
    AND MfProd.[IP machine] = T2.[IP machine]
    AND MfProd.[Timer Tag] = T2.[Timer Tag]
    AND MfProd.Tag = T2.Tag
    AND MfProd.[Timer Mfdec] = T2.[Timer Mfdec]
    AND MfProd.MfDec = T2.MfDec
    AND MfProd.[Timer SendB] = T2.[Timer SendB]
    AND MfProd.[Nom du poste] = T2.[Nom du poste]
    AND MfProd.[IP du poste] = T2.[IP du poste]
    AND MfProd.[Numéro de controle] = T2.[Numéro de controle]
    AND MfProd.[Timer WsRcv] = T2.[Timer WsRcv]
    AND MfProd.[Numéro identification] = T2.[Numéro identification]
    AND MfProd.[Timer Wssho] = T2.[Timer Wssho]
    AND MfProd.[timer WsDec]= T2.[Timer WsDec]
    AND MfProd.WsDec = T2.WsDec
    )
    En règle générale, en programmation :
    - On n'utilise pas d'espace pour nommer les objets (variables, tables, champs, etc.)
    - On n'utilise que le jeu de caractères US ASCII 7 bits (donc sans accents ou autres caractères étendus)
    - On évite d'utiliser la casse pour différentier des objets

    Ceci afin (dans l'ordre) :
    - De rendre le code plus lisible (regarde tous les crochets comme c'est beau maintenant )
    - De rendre le code lisible par le plus grand nombre, y compris des étrangers (que faire si demain ton appli est utilisée et maintenue à l'étranger ?)
    - D'éviter de troubler les personnes qui vont faire la maintenance avec des mots à priori identiques mais orthographiés différement (surtout quand il s'agit d'une majuscule qui change !)

    Donc avant d'aller plus loin, je te conseille fortement de revoir le nom de tes tables et champs pour virer les espaces et les accents (SQL n'est pas CS, dont les majuscules on s'en cogne )

  3. #3
    Membre averti
    Homme Profil pro
    Sopotel
    Inscrit en
    Juillet 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Sopotel
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2011
    Messages : 33
    Par défaut
    Grand merci StringBuilder, problème résolu simplement, la honte opour moi.

  4. #4
    Membre Expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Par défaut
    SQL n'est pas CS, dont les majuscules on s'en cogne
    Décidément... SQL SERVER n'a rien à voir la dedans c'est la COLLATION qui détermine cela!

  5. #5
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par iberserk Voir le message
    Décidément... SQL SERVER n'a rien à voir la dedans c'est la COLLATION qui détermine cela!
    Décidément... oui, c'est vraiment le cas de le dire...

    Je ne parle pas de SQL Server, mais du langagne SQL.

    SQL n'est pas CS.

    Les données qu'il manipule peuvent l'être.

    Mais si tu crées une table "toto" de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    create table toto (id int primary key, name varchar(20) not null);
    Rien ne t'empêche d'utiliser cette requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select NAME from Toto where iD = 1;
    LE LANGAGE SQL N'EST PAS CS.

  6. #6
    Membre Expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Par défaut
    Décidément... oui, c'est vraiment le cas de le dire...

    Je ne parle pas de SQL Server, mais du langagne SQL.

    SQL n'est pas CS.

    Les données qu'il manipule peuvent l'être.

    Mais si tu crées une table "toto" de la façon suivante :
    Vous pourriez au moins vérifier vos affirmations:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CREATE DATABASE TEST  ON  PRIMARY 
    ( NAME = N'TEST', FILENAME = N'D:\MSSQL10.MSSQLSERVER\MSSQL\DATA\TEST.mdf' , SIZE = 4096KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
    COLLATE FRENCH_BIN
    Puis:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    USE TEST
    GO
    CREATE TABLE dbo.TEST 
    (
     TEST_ID integer NOT NULL
    )
    Et enfin voyez si 'SQL' n'est pas CS:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM TEST.dbo.test
    Résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Msg*208, Niveau*16, État*1, Ligne*1
    Nom d'objet 'test' non valide.

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

Discussions similaires

  1. Passer en mode connection mixte sur SQL server 2008
    Par thebarbarius dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 10/12/2013, 14h00
  2. Réponses: 3
    Dernier message: 17/05/2010, 11h50
  3. Réponses: 0
    Dernier message: 30/09/2009, 18h13
  4. Réponses: 0
    Dernier message: 30/09/2009, 18h13
  5. Serveur lié sur sql server 2008
    Par bruno.durand dans le forum Développement
    Réponses: 2
    Dernier message: 11/03/2009, 13h49

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