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
Rudi Bruchez
Bonjour,
Oriane a écrit:
la question est dans le titre...Comment fairte puisque la contrainte Sql n'autorise la présence que d'un seul NULL dans les données ?
En effet, c'est une limitation gênante de SQL Server, qui contredit la norme SQL. Tu peux contourner la problème en faisant respecter la contrainte par un trigger.
la question est dans le titre...Comment fairte puisque la contrainte Sql
n'autorise la présence que d'un seul NULL dans les données ?
En effet, c'est une limitation gênante de SQL Server, qui contredit la
norme SQL. Tu peux contourner la problème en faisant respecter la
contrainte par un trigger.
la question est dans le titre...Comment fairte puisque la contrainte Sql n'autorise la présence que d'un seul NULL dans les données ?
En effet, c'est une limitation gênante de SQL Server, qui contredit la norme SQL. Tu peux contourner la problème en faisant respecter la contrainte par un trigger.
la question est dans le titre...Comment fairte puisque la contrainte Sql n'autorise la présence que d'un seul NULL dans les données ?
En effet, c'est une limitation gênante de SQL Server, qui contredit la norme SQL. Tu peux contourner la problème en faisant respecter la contrainte par un trigger.
et surtout n'oubliez pas d'y ajouter un index !
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.sqlspot.com *************************
Rudi Bruchez a écrit :
Bonjour,
Oriane a écrit:
la question est dans le titre...Comment fairte puisque la contrainte Sql
n'autorise la présence que d'un seul NULL dans les données ?
En effet, c'est une limitation gênante de SQL Server, qui contredit la
norme SQL. Tu peux contourner la problème en faisant respecter la
contrainte par un trigger.
et surtout n'oubliez pas d'y ajouter un index !
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.sqlspot.com *************************
la question est dans le titre...Comment fairte puisque la contrainte Sql n'autorise la présence que d'un seul NULL dans les données ?
En effet, c'est une limitation gênante de SQL Server, qui contredit la norme SQL. Tu peux contourner la problème en faisant respecter la contrainte par un trigger.
et surtout n'oubliez pas d'y ajouter un index !
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.sqlspot.com *************************
"Rudi Bruchez" <rudi#nospam#at#babaluga.com> a écrit dans le message de news:%> En effet, c'est une limitation gênante de SQL Server, qui contredit la
norme SQL. Tu peux contourner la problème en faisant respecter la contrainte par un trigger.
Euh par le + grand des hasards, tu n'aurais pas son code ?
Rudi Bruchez
Bonjour,
Oriane a écrit:
Euh par le + grand des hasards, tu n'aurais pas son code ?
qqch comme ceci :
USE tempdb GO
CREATE TABLE dbo.doublon ( id int NOT NULL IDENTITY(1,1) PRIMARY KEY, col int NULL) GO
CREATE INDEX nix$doublon$col ON dbo.doublon (col) GO
CREATE TRIGGER atr$doublon$col_unique ON dbo.doublon AFTER INSERT, UPDATE AS BEGIN IF @@ROWCOUNT = 0 RETURN SET NOCOUNT ON
IF EXISTS ( SELECT 1 FROM dbo.doublon d JOIN inserted i ON d.id <> i.id AND d.col = i.col) BEGIN RAISERROR('doublons sur col interdits', 16, 10) ROLLBACK END END GO
INSERT INTO dbo.doublon (col) VALUES (NULL) INSERT INTO dbo.doublon (col) VALUES (NULL) INSERT INTO dbo.doublon (col) VALUES (1) INSERT INTO dbo.doublon (col) VALUES (2) INSERT INTO dbo.doublon (col) VALUES (3) GO SELECT * FROM dbo.doublon GO
Euh par le + grand des hasards, tu n'aurais pas son code ?
qqch comme ceci :
USE tempdb
GO
CREATE TABLE dbo.doublon (
id int NOT NULL IDENTITY(1,1) PRIMARY KEY,
col int NULL)
GO
CREATE INDEX nix$doublon$col ON dbo.doublon (col)
GO
CREATE TRIGGER atr$doublon$col_unique
ON dbo.doublon
AFTER INSERT, UPDATE
AS BEGIN
IF @@ROWCOUNT = 0 RETURN
SET NOCOUNT ON
IF EXISTS (
SELECT 1
FROM dbo.doublon d
JOIN inserted i ON d.id <> i.id AND d.col = i.col)
BEGIN
RAISERROR('doublons sur col interdits', 16, 10)
ROLLBACK
END
END
GO
INSERT INTO dbo.doublon (col) VALUES (NULL)
INSERT INTO dbo.doublon (col) VALUES (NULL)
INSERT INTO dbo.doublon (col) VALUES (1)
INSERT INTO dbo.doublon (col) VALUES (2)
INSERT INTO dbo.doublon (col) VALUES (3)
GO
SELECT * FROM dbo.doublon
GO
Euh par le + grand des hasards, tu n'aurais pas son code ?
qqch comme ceci :
USE tempdb GO
CREATE TABLE dbo.doublon ( id int NOT NULL IDENTITY(1,1) PRIMARY KEY, col int NULL) GO
CREATE INDEX nix$doublon$col ON dbo.doublon (col) GO
CREATE TRIGGER atr$doublon$col_unique ON dbo.doublon AFTER INSERT, UPDATE AS BEGIN IF @@ROWCOUNT = 0 RETURN SET NOCOUNT ON
IF EXISTS ( SELECT 1 FROM dbo.doublon d JOIN inserted i ON d.id <> i.id AND d.col = i.col) BEGIN RAISERROR('doublons sur col interdits', 16, 10) ROLLBACK END END GO
INSERT INTO dbo.doublon (col) VALUES (NULL) INSERT INTO dbo.doublon (col) VALUES (NULL) INSERT INTO dbo.doublon (col) VALUES (1) INSERT INTO dbo.doublon (col) VALUES (2) INSERT INTO dbo.doublon (col) VALUES (3) GO SELECT * FROM dbo.doublon GO
J'ai oublié de préciser une chose. La comparaison ne fonctionnera que si la connexion a l'option ANSI_NULLS à ON. Par sécurité, ça peut valoir la peine d'ajouter en début de trigger un test du genre :
IF SESSIONPROPERTY ('ANSI_NULLS') = 0 SET ANSI_NULLS ON
J'ai oublié de préciser une chose. La comparaison ne fonctionnera que si
la connexion a l'option ANSI_NULLS à ON. Par sécurité, ça peut valoir la
peine d'ajouter en début de trigger un test du genre :
IF SESSIONPROPERTY ('ANSI_NULLS') = 0
SET ANSI_NULLS ON
J'ai oublié de préciser une chose. La comparaison ne fonctionnera que si la connexion a l'option ANSI_NULLS à ON. Par sécurité, ça peut valoir la peine d'ajouter en début de trigger un test du genre :
IF SESSIONPROPERTY ('ANSI_NULLS') = 0 SET ANSI_NULLS ON