Как создать ограничение для условных уникальных значений?

Как утверждали другие, у вас нет гарантии относительно порядка, когда вы перебираете свойства объекта. Если вам нужен упорядоченный список нескольких полей, я предложил создать массив объектов.

var myarr = [{somfield1: 'x', somefield2: 'y'},
{somfield1: 'a', somefield2: 'b'},
{somfield1: 'i', somefield2: 'j'}];

Таким образом вы можете использовать регулярный цикл и иметь порядок вставки. Затем вы можете использовать метод сортировки массива, чтобы отсортировать его в новом массиве, если это необходимо.

0
задан Adnand 18 January 2019 в 09:58
поделиться

2 ответа

Создать отфильтрованный уникальный индекс:

CREATE UNIQUE INDEX UNI_Student_FirstName_LastName ON Student (FirstName, LastName)
WHERE Active = 1
0
ответ дан EzLo 18 January 2019 в 09:58
поделиться

Вы не можете создать CONSTRAINT для этого, однако, вы можете создать отфильтрованный уникальный индекс:

USE Sandbox;
GO

CREATE TABLE dbo.Student (ID int IDENTITY(1, 1) PRIMARY KEY,
                          FirstName varchar(100),
                          LastName varchar(100),
                          Active bit);


CREATE UNIQUE INDEX UQ_StudentName
    ON Student (FirstName,LastName)
    WHERE Active = 1;
GO

INSERT INTO dbo.Student (FirstName,
                         LastName,
                         Active)
VALUES ('Jane', 'Smith', 1); --Success
GO
INSERT INTO dbo.Student (FirstName,
                         LastName,
                         Active)
VALUES ('Jane', 'Smith', 0); --Success
GO
INSERT INTO dbo.Student (FirstName,
                         LastName,
                         Active)
VALUES ('Jane', 'Smith', 0); --Success
GO
INSERT INTO dbo.Student (FirstName,
                         LastName,
                         Active)
VALUES ('Jane', 'Smith', 1); --Fails;
GO

UPDATE dbo.Student
SET Active = 1
WHERE ID = 2; --Fails;
GO

SELECT *
FROM dbo.Student;
GO

DROP TABLE dbo.Student;

Однако я настоятельно рекомендую против мысли, что имена уникальны. Я (лично) поделился своим именем и датой рождения с другим человеком в нескольких местах моей юности, и компании, которые рассматривали имена (и дату рождения) как уникальные в своих системах, были такой головной болью для нас обоих (там действительно были места, где я (или они) не могли зарегистрироваться без использования сокращенного имени, потому что мы «уже существовали»).

0
ответ дан Larnu 18 January 2019 в 09:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: