|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Expert Confirmé Sénior
![]() ![]() ![]() Spécialiste en bases de données Inscription : septembre 2006 Messages : 2 882 ![]() |
*** Ce sujet permet de commenter les choses qui manquent selon vous à SQL-Server, issues de ce sujet :
http://www.developpez.net/forums/d10...lon-sql-server L'opération de différence existe. Simplement au lieu d'être appelée DIFFERENCE ou, comme dans l'algèbre relationnelle, MINUS, conformément à la norme SQL elle est appellée EXCEPT.
__________________
_ Faites simple, mais pas plus simple ! (A. Einstein) E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire ») => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale ») __________________ Bases de données relationnelles et normalisation : de la première à la sixième forme normale (Bonne lecture !) |
|
|
00
|
|
|
#2 |
|
Expert Confirmé Sénior
![]() ![]() ![]() Spécialiste en bases de données Inscription : septembre 2006 Messages : 2 882 ![]() |
Par rapport à la norme SQL, vous avez bien raison. Mais l’application différée des contraintes prônée par la norme n’est une bonne chose. Au nom de la garantie de l’intégrité des données, il est de loin préférable que tout se passe au sein d’un bloc d’instructions (multiple assignment), comme dans l’exemple ici.
Pour les motifs profonds de la disqualification des contrôles différés, reportez-vous par exemple à l’ouvrage SQL and Relational Theory, pages 171 et suivantes.
__________________
_ Faites simple, mais pas plus simple ! (A. Einstein) E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire ») => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale ») __________________ Bases de données relationnelles et normalisation : de la première à la sixième forme normale (Bonne lecture !) |
|
|
20
|
|
|
#3 | ||||||
|
Membre chevronné
![]() Administrateur de base de données Inscription : août 2009 Messages : 404 ![]() |
Non. L'implémentation d'un type Booléen implique des conséquences plus profondes et très utiles comme l'explique Chris Date.
La requête suivante retourne une valeur de type entier : De la même manière il devrait être possible de retourner directement dans la clause SELECT une valeur booléenne, qui serait le résultat d'une expression.. booléenne donc. Il devrait être possible d'écrire les requêtes suivantes : Code :
Code :
Code :
|
||||||
|
|
10
|
|
|
#4 |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 667 ![]() |
OK, j'y vois un peu plus clair dans votre expression.
Je suis d'accord sur l'addition, qui devrait provoquer une erreur. En revanche sur l'EXISTS d'une requête, je pense (à tort peut-être !) que c'est un prédicat, donc je trouve normal que votre exemple ne fonctionne pas. L'exemple d'utilisation de ISNUMERIC() que vous donnez fonctionne et retourne bien 1. Idem pour la clause WHERE avec une fonction, définie par l'utilisateur ou native. En revanche c'est assez contre-performant. Merci pour la référence au livre de Chris Date, je vais m'empresser de me le procurer. @++
__________________
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 |
|
00
|
|
|
#5 | ||
|
Expert Confirmé Sénior
![]() ![]() ![]() Spécialiste en bases de données Inscription : septembre 2006 Messages : 2 882 ![]() |
Bonsoir,
Hum... Je cite la référence SQL Server à propos du type BIT : « An integer data type that can take a value of 1, 0, or NULL. »Pour sa part, Oishiiii a fait mention d’un vrai type booléen (BOOLEAN). Que je sache, d’après la citation ci-dessus, le type BIT n’est jamais qu’une spécialisation du type INT, avec lequel on passe de la logique des prédicats à un simulacre, à un ersatz, à de l’épicerie. NULL (que par ailleurs l’auteur de la référence considère comme une valeur, alors que ça n’est qu’une marque !) ne fait pas partie des valeurs possibles pour le type booléen, qui sont limitées à TRUE, FALSE, point barre. La norme autorise pour sa part TRUE, FALSE, UNKNOWN, mais je n’entrerai pas dans la polémique, je l’ai fait assez souvent chez DVP. Par ailleurs, il y a du mou dans la corde à nœuds avec ce type BIT, car si je code : Code :
Or je ne sache pas que 3.14 = 1. Quand l’auteur de la référence écrit : « The string values TRUE and FALSE can be converted to bit values: TRUE is converted to 1 and FALSE is converted to 0. »Il a tout faux, car il y a conversion non pas de TRUE et FALSE mais de 'TRUE' et 'FALSE', qui ne sont pas des valeurs de type booléen, mais de type chaîne de caractères. On nage dans l’approximation (l'arnaque ?) la plus totale. Encore un mot à propos de la norme SQL : « The data type boolean comprises the distinct truth values True and False. Unless prohibited by a NOT NULL constraint, the boolean data type also supports the truth value Unknown as the null value. This specification does not make a distinction between the null value of the boolean data type and the truth value Unknown that is the result of an SQL <predicate>, <search condition>, or <boolean value expression>; they may be used interchangeably to mean exactly the same thing. »Vous avez bien lu ? Selon la norme, il revient au même de dire : « Je ne sais pas » et « Je sais que l’information est absente » ! Etc.
__________________
_ Faites simple, mais pas plus simple ! (A. Einstein) E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire ») => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale ») __________________ Bases de données relationnelles et normalisation : de la première à la sixième forme normale (Bonne lecture !) |
||
|
|
20
|
|
|
#6 | |
|
Expert Confirmé Sénior
![]() ![]() ![]() Spécialiste en bases de données Inscription : septembre 2006 Messages : 2 882 ![]() |
Citation:
__________________
_ Faites simple, mais pas plus simple ! (A. Einstein) E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire ») => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale ») __________________ Bases de données relationnelles et normalisation : de la première à la sixième forme normale (Bonne lecture !) |
|
|
|
10
|
|
|
#7 |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 667 ![]() |
Merci fmsrel.
En fait je ne me suis jamais rendu compte de ces anomalies parce que je maintiens mes bases de données de façon très stricte. Même si ce genre d'anomalies devrait plutôt générer une erreur que "passer", je pense qu'elles relèvent plus d'une mauvaise utilisation de SQL Server donc bien des éditeurs profitent ou ont demandé à profiter ... Pourquoi cette course aux versions ? Parce que pour vendre des lames de rasoir comme des logiciels, il faut y ajouter (ou faire croire qu'on y a ajouté, ce qui est plus vrai dans le cas des lames de rasoir @++
__________________
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 |
|
00
|
|
|
#8 | |
|
Expert Confirmé Sénior
![]() ![]() ![]() Spécialiste en bases de données Inscription : septembre 2006 Messages : 2 882 ![]() |
De rien Nicolas,
Citation:
__________________
_ Faites simple, mais pas plus simple ! (A. Einstein) E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire ») => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale ») __________________ Bases de données relationnelles et normalisation : de la première à la sixième forme normale (Bonne lecture !) |
|
|
|
10
|
|
|
#9 | |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 667 ![]() |
Je n'en doute pas
Pour en revenir à un exemple donné par Oishiiii, SELECT 1+1 retourne 2, puisque ces deux entiers sont considérés en tant que tel (=> int) En revanche, si l'on exécute : Code :
SELECT CAST(1 AS bit) + CAST(1 AS bit) Citation:
retourne 1, et ça, c'est très moche @++
__________________
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 |
|
|
10
|
|
|
#10 | |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 667 ![]() |
Citation:
Une fonction retourne une valeur, et par là même est susceptible d'être appelée dans une requête. C'est donc pour cela qu'il n'y a pas de gestion d'erreur faisable dans les fonctions. @++
__________________
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 |
|
|
00
|
|
|
#11 | |||||||
![]() ![]() |
Citation:
Vérifions avec Oracle : Code :
Code :
Code :
__________________
Email : http://scr.im/waldar |
|||||||
|
00
|
|
|
#12 | |||
|
Membre Expert
![]() ![]() |
Citation:
Prenons un cas concret Problème : essayons d'écrire la fonction ISDATE2 qui retourne 1 si l'expression entrée est une valeur DATETIME2 valide sinon retourne 0 Constat Impossible d'écrire cette fonction ISDATE2 avec des TRY et CATCH à l'intérieur Solution de contournement Code :
|
|||
|
00
|
|
|
#13 | |
|
Expert Confirmé Sénior
![]() ![]() ![]() Spécialiste en bases de données Inscription : septembre 2006 Messages : 2 882 ![]() |
Citation:
La vraie solution qui garantit la stabilité est bien celle qui est préconisée par Chris Date qui disqualifie tout contrôle différé, alors que du temps de sa folle jeunesse il était pour (cf. "Immediate vs. Deferred Rules" in Relational Database, Writings 1991-1994, pages 93-94). Comme je l’ai déjà précisé, tout contrôle peur être rendu immédiat grâce à la technique de l’affectation multiple (Multiple Assignment). A ce sujet, je vous renvoie une fois de plus à l’ouvrage SQL and Relational Theory, pages 171 et suivantes.
__________________
_ Faites simple, mais pas plus simple ! (A. Einstein) E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire ») => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale ») __________________ Bases de données relationnelles et normalisation : de la première à la sixième forme normale (Bonne lecture !) |
|
|
|
10
|
|
|
#14 |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 667 ![]() |
Zinzinetti,
Je me suis mal exprimé, et pour moi ce que tu montres là est une vérification à effectuer côté applicatif (depuis quand une chaîne est une date ?) Notes que tu peux faire cela avec une fonction d'assembly ... @++
__________________
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 |
|
00
|
|
|
#15 | |
|
Membre Expert
![]() ![]() |
Citation:
La fonction native ISDATE prend bien en entrée une chaîne de caractères ou expression qui peut être convertie en une chaîne de caractères Eh oui ...là il faut que je sorte de SSMS pour lancer Visual Studio et commencer par coder du C# ou autre ... Tu vois la problématique ? Qu'est ce qui empêche/bloque MS de mettre à disposition la fonction ISDATE2 valable pour les types DATETIME2 ? On revient à la question initiale ! A+ |
|
|
00
|
|
|
#16 | |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 667 ![]() |
Citation:
@++
__________________
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 |
|
|
00
|
|
|
#17 | |||
![]() ![]() ![]() David BARBARINExpert SQL Server Inscription : août 2005 Messages : 3 723 ![]() |
Bonjour tout le monde,
Juste quelques remarques sur certains choses qui ont été dite. La discussion est très intéressante :-) >> Zinzineti Citation:
>> Waldar Citation:
>> Kloun Citation:
|
|||
|
10
|
|
|
#18 | |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 950 ![]() |
Citation:
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 * * * * * |
|
|
00
|
|
|
#19 | |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 950 ![]() |
Citation:
2) le type boolean est considéré comme deprecated dans les dernières version de la norme SQL 3) personne sauf Ocelot n'a implémenté les Assertions du fait de problèmes de performances qui peuvent s'avérer dramatiques. 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 * * * * * |
|
|
01
|
|
|
#20 | ||
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 950 ![]() |
Citation:
Citation:
Enfin pour DBCC c'est en voie de remplacement. 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 * * * * * |
||
|
00
|
Copyright © 2000-2012 - www.developpez.com