J'ai actuellement un petit soucis. Dans une de mes tables, j'ai un champs
de type varchar dont la valeur est optionnelle (donc null permis).
Or lorsque la valeur est spécifiée elle ne peut pas être dupliquée. La
création d'un index unique ne fonctionne pas car il n'accepte alors le null
qu'une seule fois pour l'ensemble des enregistrements.
Y a-t'il une façon élégante de résoudre ce problème ?
La solution de coder manuellement la vérification avant la sauvegarde étant
évidemment possible.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Fred BROUARD
Bonjour,
Laurent a écrit:
Bonjour à tous,
J'ai actuellement un petit soucis. Dans une de mes tables, j'ai un champs de type varchar dont la valeur est optionnelle (donc null permis). Or lorsque la valeur est spécifiée elle ne peut pas être dupliquée. La création d'un index unique ne fonctionne pas car il n'accepte alors le null qu'une seule fois pour l'ensemble des enregistrements.
Y a-t'il une façon élégante de résoudre ce problème ?
Oui, un trigger. Exemple :
CREATE TABLE MaTable (COL_UNIQUE_OR_NULL INT) GO
CREATE TRIGGER G_Matable_UNIQUE_OR_NULL ON MaTable FOR INSERT, UPDATE AS IF EXISTS (SELECT COUNT(COL_UNIQUE_OR_NULL) FROM MaTable GROUP BY COL_UNIQUE_OR_NULL HAVING COUNT(COL_UNIQUE_OR_NULL) > 1) BEGIN ROLLBACK TRANSACTION RAISERROR('Violation de la contrainte d''unicité de la colonne COL_UNIQUE_OR_NULL de la table MaTable', 16, 1) END GO
INSERT INTO MaTable VALUES (NULL) INSERT INTO MaTable VALUES (NULL) INSERT INTO MaTable VALUES (NULL) INSERT INTO MaTable VALUES (1) INSERT INTO MaTable VALUES (2) INSERT INTO MaTable VALUES (3)
Serveur : Msg 50000, Niveau 16, État 1, Procédure G_Matable_UNIQUE_OR_NULL, Ligne 13 Violation de la contrainte d'unicité de la colonne COL_UNIQUE_OR_NULL de la table MaTable
La solution de coder manuellement la vérification avant la sauvegarde étant évidemment possible.
Merci d'avance.
A +
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation ********************* http://www.datasapiens.com ***********************
Bonjour,
Laurent a écrit:
Bonjour à tous,
J'ai actuellement un petit soucis. Dans une de mes tables, j'ai un champs
de type varchar dont la valeur est optionnelle (donc null permis).
Or lorsque la valeur est spécifiée elle ne peut pas être dupliquée. La
création d'un index unique ne fonctionne pas car il n'accepte alors le null
qu'une seule fois pour l'ensemble des enregistrements.
Y a-t'il une façon élégante de résoudre ce problème ?
Oui, un trigger. Exemple :
CREATE TABLE MaTable (COL_UNIQUE_OR_NULL INT)
GO
CREATE TRIGGER G_Matable_UNIQUE_OR_NULL
ON MaTable
FOR INSERT, UPDATE
AS
IF EXISTS (SELECT COUNT(COL_UNIQUE_OR_NULL)
FROM MaTable
GROUP BY COL_UNIQUE_OR_NULL
HAVING COUNT(COL_UNIQUE_OR_NULL) > 1)
BEGIN
ROLLBACK TRANSACTION
RAISERROR('Violation de la contrainte d''unicité de la colonne
COL_UNIQUE_OR_NULL de la table MaTable', 16, 1)
END
GO
INSERT INTO MaTable VALUES (NULL)
INSERT INTO MaTable VALUES (NULL)
INSERT INTO MaTable VALUES (NULL)
INSERT INTO MaTable VALUES (1)
INSERT INTO MaTable VALUES (2)
INSERT INTO MaTable VALUES (3)
Serveur : Msg 50000, Niveau 16, État 1, Procédure G_Matable_UNIQUE_OR_NULL,
Ligne 13
Violation de la contrainte d'unicité de la colonne COL_UNIQUE_OR_NULL de la
table MaTable
La solution de coder manuellement la vérification avant la sauvegarde étant
évidemment possible.
Merci d'avance.
A +
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
J'ai actuellement un petit soucis. Dans une de mes tables, j'ai un champs de type varchar dont la valeur est optionnelle (donc null permis). Or lorsque la valeur est spécifiée elle ne peut pas être dupliquée. La création d'un index unique ne fonctionne pas car il n'accepte alors le null qu'une seule fois pour l'ensemble des enregistrements.
Y a-t'il une façon élégante de résoudre ce problème ?
Oui, un trigger. Exemple :
CREATE TABLE MaTable (COL_UNIQUE_OR_NULL INT) GO
CREATE TRIGGER G_Matable_UNIQUE_OR_NULL ON MaTable FOR INSERT, UPDATE AS IF EXISTS (SELECT COUNT(COL_UNIQUE_OR_NULL) FROM MaTable GROUP BY COL_UNIQUE_OR_NULL HAVING COUNT(COL_UNIQUE_OR_NULL) > 1) BEGIN ROLLBACK TRANSACTION RAISERROR('Violation de la contrainte d''unicité de la colonne COL_UNIQUE_OR_NULL de la table MaTable', 16, 1) END GO
INSERT INTO MaTable VALUES (NULL) INSERT INTO MaTable VALUES (NULL) INSERT INTO MaTable VALUES (NULL) INSERT INTO MaTable VALUES (1) INSERT INTO MaTable VALUES (2) INSERT INTO MaTable VALUES (3)
Serveur : Msg 50000, Niveau 16, État 1, Procédure G_Matable_UNIQUE_OR_NULL, Ligne 13 Violation de la contrainte d'unicité de la colonne COL_UNIQUE_OR_NULL de la table MaTable
La solution de coder manuellement la vérification avant la sauvegarde étant évidemment possible.
Merci d'avance.
A +
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation ********************* http://www.datasapiens.com ***********************
Laurent
Merci beaucoup pour le temps passé à me répondre. Je vais expérimenter de suite.
"Fred BROUARD" a écrit dans le message de news:
Bonjour,
Laurent a écrit:
Bonjour à tous,
J'ai actuellement un petit soucis. Dans une de mes tables, j'ai un champs de type varchar dont la valeur est optionnelle (donc null permis). Or lorsque la valeur est spécifiée elle ne peut pas être dupliquée. La création d'un index unique ne fonctionne pas car il n'accepte alors le null qu'une seule fois pour l'ensemble des enregistrements.
Y a-t'il une façon élégante de résoudre ce problème ?
Oui, un trigger. Exemple :
CREATE TABLE MaTable (COL_UNIQUE_OR_NULL INT) GO
CREATE TRIGGER G_Matable_UNIQUE_OR_NULL ON MaTable FOR INSERT, UPDATE AS IF EXISTS (SELECT COUNT(COL_UNIQUE_OR_NULL) FROM MaTable GROUP BY COL_UNIQUE_OR_NULL HAVING COUNT(COL_UNIQUE_OR_NULL) > 1) BEGIN ROLLBACK TRANSACTION RAISERROR('Violation de la contrainte d''unicité de la colonne COL_UNIQUE_OR_NULL de la table MaTable', 16, 1) END GO
INSERT INTO MaTable VALUES (NULL) INSERT INTO MaTable VALUES (NULL) INSERT INTO MaTable VALUES (NULL) INSERT INTO MaTable VALUES (1) INSERT INTO MaTable VALUES (2) INSERT INTO MaTable VALUES (3)
Serveur : Msg 50000, Niveau 16, État 1, Procédure G_Matable_UNIQUE_OR_NULL, Ligne 13 Violation de la contrainte d'unicité de la colonne COL_UNIQUE_OR_NULL de la table MaTable
La solution de coder manuellement la vérification avant la sauvegarde étant évidemment possible.
Merci d'avance.
A +
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation ********************* http://www.datasapiens.com ***********************
Merci beaucoup pour le temps passé à me répondre. Je vais expérimenter de
suite.
"Fred BROUARD" <brouardf@club-internet.fr> a écrit dans le message de news:
uNIlV580FHA.2076@TK2MSFTNGP14.phx.gbl...
Bonjour,
Laurent a écrit:
Bonjour à tous,
J'ai actuellement un petit soucis. Dans une de mes tables, j'ai un
champs de type varchar dont la valeur est optionnelle (donc null permis).
Or lorsque la valeur est spécifiée elle ne peut pas être dupliquée. La
création d'un index unique ne fonctionne pas car il n'accepte alors le
null qu'une seule fois pour l'ensemble des enregistrements.
Y a-t'il une façon élégante de résoudre ce problème ?
Oui, un trigger. Exemple :
CREATE TABLE MaTable (COL_UNIQUE_OR_NULL INT)
GO
CREATE TRIGGER G_Matable_UNIQUE_OR_NULL
ON MaTable
FOR INSERT, UPDATE
AS
IF EXISTS (SELECT COUNT(COL_UNIQUE_OR_NULL)
FROM MaTable
GROUP BY COL_UNIQUE_OR_NULL
HAVING COUNT(COL_UNIQUE_OR_NULL) > 1)
BEGIN
ROLLBACK TRANSACTION
RAISERROR('Violation de la contrainte d''unicité de la colonne
COL_UNIQUE_OR_NULL de la table MaTable', 16, 1)
END
GO
INSERT INTO MaTable VALUES (NULL)
INSERT INTO MaTable VALUES (NULL)
INSERT INTO MaTable VALUES (NULL)
INSERT INTO MaTable VALUES (1)
INSERT INTO MaTable VALUES (2)
INSERT INTO MaTable VALUES (3)
Serveur : Msg 50000, Niveau 16, État 1, Procédure
G_Matable_UNIQUE_OR_NULL, Ligne 13
Violation de la contrainte d'unicité de la colonne COL_UNIQUE_OR_NULL de
la table MaTable
La solution de coder manuellement la vérification avant la sauvegarde
étant évidemment possible.
Merci d'avance.
A +
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
Merci beaucoup pour le temps passé à me répondre. Je vais expérimenter de suite.
"Fred BROUARD" a écrit dans le message de news:
Bonjour,
Laurent a écrit:
Bonjour à tous,
J'ai actuellement un petit soucis. Dans une de mes tables, j'ai un champs de type varchar dont la valeur est optionnelle (donc null permis). Or lorsque la valeur est spécifiée elle ne peut pas être dupliquée. La création d'un index unique ne fonctionne pas car il n'accepte alors le null qu'une seule fois pour l'ensemble des enregistrements.
Y a-t'il une façon élégante de résoudre ce problème ?
Oui, un trigger. Exemple :
CREATE TABLE MaTable (COL_UNIQUE_OR_NULL INT) GO
CREATE TRIGGER G_Matable_UNIQUE_OR_NULL ON MaTable FOR INSERT, UPDATE AS IF EXISTS (SELECT COUNT(COL_UNIQUE_OR_NULL) FROM MaTable GROUP BY COL_UNIQUE_OR_NULL HAVING COUNT(COL_UNIQUE_OR_NULL) > 1) BEGIN ROLLBACK TRANSACTION RAISERROR('Violation de la contrainte d''unicité de la colonne COL_UNIQUE_OR_NULL de la table MaTable', 16, 1) END GO
INSERT INTO MaTable VALUES (NULL) INSERT INTO MaTable VALUES (NULL) INSERT INTO MaTable VALUES (NULL) INSERT INTO MaTable VALUES (1) INSERT INTO MaTable VALUES (2) INSERT INTO MaTable VALUES (3)
Serveur : Msg 50000, Niveau 16, État 1, Procédure G_Matable_UNIQUE_OR_NULL, Ligne 13 Violation de la contrainte d'unicité de la colonne COL_UNIQUE_OR_NULL de la table MaTable
La solution de coder manuellement la vérification avant la sauvegarde étant évidemment possible.
Merci d'avance.
A +
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation ********************* http://www.datasapiens.com ***********************