Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

new problematique ;)

2 réponses
Avatar
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 ???

2 réponses

Avatar
SQLpro
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" wrote:
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 ???


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

--
Patrice

"christophe" a écrit dans le message de news:

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 ???