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 08/09/2011, 13h24   #1
Invité régulier
 
Homme
Sopotel
Inscription : 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
Points : 5
Points : 5
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 :
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)
Citation:
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
nathantahiti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2011, 14h37   #2
Membre Expert
 
Homme Sylvain Devidal
Chef de projets Générix
Inscription : février 2010
Messages : 1 062
Détails du profil
Informations personnelles :
Nom : Homme Sylvain Devidal
Âge : 33
Localisation : France, Rhône (Rhône Alpes)

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

Informations forums :
Inscription : février 2010
Messages : 1 062
Points : 1 515
Points : 1 515
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 :
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 )
StringBuilder est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2011, 15h35   #3
Invité régulier
 
Homme
Sopotel
Inscription : 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
Points : 5
Points : 5
Grand merci StringBuilder, problème résolu simplement, la honte opour moi.
nathantahiti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2011, 16h00   #4
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
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 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Citation:
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!
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2011, 15h42   #5
Membre Expert
 
Homme Sylvain Devidal
Chef de projets Générix
Inscription : février 2010
Messages : 1 062
Détails du profil
Informations personnelles :
Nom : Homme Sylvain Devidal
Âge : 33
Localisation : France, Rhône (Rhône Alpes)

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

Informations forums :
Inscription : février 2010
Messages : 1 062
Points : 1 515
Points : 1 515
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 :
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 :
1
2
 
SELECT NAME FROM Toto WHERE iD = 1;
LE LANGAGE SQL N'EST PAS CS.
StringBuilder est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2011, 16h25   #6
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
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 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Citation:
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 :
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 :
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 :
SELECT * FROM TEST.dbo.test
Résultat:
Code :
1
2
Msg*208, Niveau*16, État*1, Ligne*1
Nom d'objet 'test' non valide.
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2011, 02h19   #7
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 686
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 686
Points : 10 431
Points : 10 431
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Vous avez tous les deux raisons : le langage SQL est insensible à la casse, mais cela ne concerne que les mots réservés, SELECT, UPDATE, FROM, AND, OR...

Dès qu'on arrive sur les noms d'objets, ce sont bien les paramétrages des bases de données qui définissent ou non la sensibilité à la casse.
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 13/09/2011, 07h37   #8
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
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 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Citation:
Vous avez tous les deux raisons : le langage SQL est insensible à la casse, mais cela ne concerne que les mots réservés, SELECT, UPDATE, FROM, AND, OR...

Dès qu'on arrive sur les noms d'objets, ce sont bien les paramétrages des bases de données qui définissent ou non la sensibilité à la casse.
Sans vouloir pinailler (quoique...)
Citation:
SELECT NAME FROM Toto WHERE iD = 1;
Il était bien question ici de nom d'objet...
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2011, 12h22   #9
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 686
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 686
Points : 10 431
Points : 10 431
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Tout-à-fait, StringBuilder avait raison sur le fond mais tort sur l'exemple !
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2011, 13h06   #10
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
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 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Citation:
Tout-à-fait, StringBuilder avait raison sur le fond mais tort sur l'exemple !
Citation:
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 )
A?
Je ne peux laisser nathantahiti croire celà
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h57.


 
 
 
 
Partenaires

Hébergement Web