0
votes

MSSQL: Ajoutez une contrainte unique à la table de création et permettez à NULLS

Désolé, probablement noob question, mais je n'ai pas pu trouver une réponse.

CREATE TABLE SomeTable
(
   Id DECIMAL NOT NULL,
   UserIdentifier NVARCHAR(100) NULL,
   PRIMARY KEY (Id),
   ????
)


2 commentaires

Ah, je ne vois que maintenant que vous demandez la syntaxe en ligne d'un index unique filtré, intégrant l'index dans la table Créer . C'est facile: il n'y en a pas. Malheureusement, T-SQL n'est pas parfaitement cohérent de cette manière. Cela n'a généralement pas beaucoup d'importance que vous ne compromettez pas de manière positive une seule déclaration pour une raison quelconque. Notez également que les contraintes (non indexés) ne permettent pas de filtrer; Ceci n'est possible que pour des index uniques.


Peut-être Ce peut aider vous. Vous pouvez créer un index unique qui permet à NULL pour plusieurs enregistrements


3 Réponses :


0
votes

C'est assez simple. Si vous souhaitez ajouter sur une colonne unique, appliquez sur le niveau de colonne en ajoutant simplement unique code> mot-clé.
Mais si vous voulez que cela soit sur la base de plusieurs colonnes, devez ajouter contrainte code>. Pour plus d'informations, vous trouverez ce lien. Link

CREATE TABLE Persons (
    ID int NOT NULL,
    LastName varchar(255) NOT NULL UNIQUE,   --- FOR ADDING ON ONE COLUMN
    FirstName varchar(255),
    Age int,
    CONSTRAINT UC_Person UNIQUE (ID,LastName)   --- FOR MULTIPLE COLUMNS
);



0 commentaires

0
votes

dans SQL Server à l'aide de UNIQUE code> mot-clé.

CREATE TABLE SomeTable
(
   Id DECIMAL NOT NULL,
   UserIdentifier NVARCHAR(100) NULL UNIQUE,
   PRIMARY KEY (Id)
)


1 commentaires

Cela ne permettra pas null s. Eh bien, il permettra à un seul null , après quoi il lancera une erreur de violation de contrainte.



4
votes

en supposant em> que vous souhaitez plusieurs lignes avec la valeur null code>, vous ne pourrez pas utiliser une contrainte de code code>, comme NULL code> est toujours une valeur (même si un inconnu). Par exemple: xxx pré>

remarque le second insérer code> échoue. P>

Vous pouvez plutôt utiliser un index conditionnel un indice unique : P>

CREATE TABLE dbo.YourTable (UserIdentifier nvarchar(100) NULL);

CREATE UNIQUE NONCLUSTERED INDEX UI_UI ON dbo.YourTable(UserIdentifier) WHERE UserIdentifier IS NOT NULL;

GO
INSERT INTO dbo.YourTable (UserIdentifier)
VALUES(NULL); -- Success
GO
INSERT INTO dbo.YourTable (UserIdentifier)
VALUES(NULL); --Success
GO
INSERT INTO dbo.YourTable (UserIdentifier)
VALUES(N'Steve'); --Success
GO
INSERT INTO dbo.YourTable (UserIdentifier)
VALUES(N'Jayne'); --Success
GO
INSERT INTO dbo.YourTable (UserIdentifier)
VALUES(N'Steve'); --Fails
GO
DROP TABLE dbo.YourTable;


1 commentaires

Bien. Merci Monsieur.