Bonsoir à tous,
voici mon souci : Je cherche à empêcher qu'un numéro de facture soit utilisé plus d'une fois pour une même année.
Mon code est donc composé d'une fonction et d'une contrainte check:
FONCTION :
CONTRAINTE:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 CREATE FUNCTION checkFNumber(@fnumber varchar(8000), @date datetime) RETURNS INT AS BEGIN DECLARE @dp int SET @dp = DATEPART(year, @date) RETURN CASE WHEN @fnumber NOT IN (SELECT DISTINCT numero FROM Facture WHERE DATEPART(Year, date_facture) = @dp) THEN 1 ELSE 0 END END
Je tente d'insérer une facture :
Code : Sélectionner tout - Visualiser dans une fenêtre à part ALTER TABLE Facture ADD CONSTRAINT UniqueFNumberConstraint CHECK (dbo.checkFNumber(numero, date_facture) = 1)
Erreur de SQL Server :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 INSERT INTO Facture(numero, date_facture) VALUES('2', GETDATE());
Il n'y a pourtant aucune données dans la table Facture au moment de l'insertion... comment résoudre ce problème de contrainte?Msg*547, Niveau*16, État*0, Ligne*1
L'instruction INSERT est en conflit avec la contrainte CHECK "UniqueFNumberConstraint". Le conflit s'est produit dans la base de données "automobile", table "dbo.Facture".
L'instruction a été arrêtée.
Merci d'avance
Partager