Étant donné la structure de tableau simple suivante (SQL Server 2008), je souhaite pouvoir conserver l'unicité de ma colonne de séquence numérique, mais je souhaite pouvoir mettre à jour cette valeur pour un enregistrement donné (s).Mise à jour des enregistrements de base de données avec contrainte unique
CREATE TABLE MYLIST(
ID int NOT NULL IDENTITY(1, 1)
, TITLE varchar(50) NOT NULL
, SEQUENCE int NOT NULL
, CONSTRAINT pk_mylist_id PRIMARY KEY(ID)
, CONSTRAINT uq_mylist_sequence UNIQUE(SEQUENCE)
);
mon interface me permet de pêle-mêle l'ordre des articles et je saurai avant de faire la mise à jour qui séquence non-chevauchement ils devraient tous être en, mais comment puis-je effectuer la mise à jour sans confronté à une violation de la contrainte unique?
Par exemple, dire que j'ai ces documents:
ID TITLE SEQUENCE
1 APPLE 1
2 BANANA 2
3 CHERRY 3
Et je veux mettre à jour leurs numéros de séquence à ce qui suit:
ID TITLE SEQUENCE
1 APPLE 3
2 BANANA 1
3 CHERRY 2
Mais vraiment je pourrais avoir affaire à un des éléments de couple douzaine . Les numéros de séquence ne doivent pas se chevaucher. J'ai pensé à essayer d'utiliser des déclencheurs ou de désactiver temporairement la contrainte, mais cela semblerait créer plus de problèmes. J'utilise C# et LINQ-to-SQL, mais je suis ouvert aux solutions strictement de base de données.
Pouvez-vous mettre à jour dans une déclaration? – gbn
J'ai la liberté d'essayer à peu près n'importe quoi si cela répond à votre question. – JustinStolle