new problematique ;)

Le
christophe
voila un exemple de code qui me renvoi des valeur minimal au lieu de planter
par exemple.


et le probleme c'est que cela peut me renvoyer des erreurs et surtout
induire en erreur


CREATE TABLE #TOTO (id INT IDENTITY(1,1), TOTO DATETIME, tutu int)
INSERT INTO #toto (toto, tutu) VALUES ('','')


voila ce que j'ai !
id TOTO tutu
1 |1900-01-01 00:00:00.000 |0
2 |1900-01-01 00:00:00.000 |0


comment peux t'on eviter cela ? est-ce un parametre du serveur ou de la base
par defaut ???
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
SQLpro
Le #11869141
C'est normal. SQL est un langage permissif dans lequel le transtypage
implicite est autorisé. Ainsi vos chaînes vides sont traduites toutes
deux en zéros qui sont l'une insérée directement, l'autre convertie à
nouveau en DATETIME.

La seule manière d'éviter cela est d'interdire ce genre d'insertion au
moyen de contraintes de validation que l'on voit hélas trop rarement
dans les modèles de données.

Donc :

CREATE TABLE #TOTO2
(id INT IDENTITY(1,1),
TOTO DATETIME CHECK (TOTO <> ''),
tutu int CHECK (tutu <> ''))

INSERT INTO #TOTO2 (TOTO, tutu) VALUES ('','')

Serveur : Msg 547, Niveau 16, État 1, Ligne 1
Conflit entre l'instruction INSERT et la contrainte COLUMN CHECK
'CK__#TOTO2__TOTO__77BFCB91'. Le conflit est survenu dans la base de
données 'tempdb', table
'#TOTO2____________________________________________________________________ __________________________________________00000000000D',
column 'TOTO'.
L'instruction a été arrêtée.

A +

Frédéric BROUARD - SQLpro - MVP SQL Server
Expert SQL, SGBDR, modélisation de données
SQL & SGBDR http://sqlpro.developpez.com/
Spécialiste MS SQL Server: www.sqlspot.com
audits - optimisation - tuning - formation


On 27 sep, 16:44, "christophe"
voila un exemple de code qui me renvoi des valeur minimal au lieu de plan ter
par exemple.

et le probleme c'est que cela peut me renvoyer des erreurs et surtout
induire en erreur

CREATE TABLE #TOTO (id INT IDENTITY(1,1), TOTO DATETIME, tutu int)
INSERT INTO #toto (toto, tutu) VALUES ('','')

voila ce que j'ai !
id TOTO tutu
1 |1900-01-01 00:00:00.000 |0
2 |1900-01-01 00:00:00.000 |0

comment peux t'on eviter cela ? est-ce un parametre du serveur ou de la b ase
par defaut ???


Patrice
Le #11869111
Et on veut ? Si tu veux avoir NULL, le plus simple est d'utiliser NULL dans
l'instruction d'insertion.

--
Patrice

"christophe"
voila un exemple de code qui me renvoi des valeur minimal au lieu de
planter par exemple.


et le probleme c'est que cela peut me renvoyer des erreurs et surtout
induire en erreur


CREATE TABLE #TOTO (id INT IDENTITY(1,1), TOTO DATETIME, tutu int)
INSERT INTO #toto (toto, tutu) VALUES ('','')


voila ce que j'ai !
id TOTO tutu
1 |1900-01-01 00:00:00.000 |0
2 |1900-01-01 00:00:00.000 |0


comment peux t'on eviter cela ? est-ce un parametre du serveur ou de la
base par defaut ???


Publicité
Poster une réponse
Anonyme