0

У меня есть уникальное ограничение на таблицу базы данных SQL Server 2008 с ограничением, содержащим 4 столбца. При вводе некоторых тестовых данных я неожиданно получил уникальное нарушение ограничений. Для четырех столбцов я просто вводил число, вставляя значение, увеличивая число, затем повторяя (т. Е. (1,1,1,1) (2,2,2,2,) ... и т. Д.), , Нарушение произошло, когда я добрался до 10. Если я сейчас введу какое-то число, это нарушит ограничение. Затем я попробовал войти в букву «А» и попытался вставить любые слова, начинающиеся с «А», что привело к нарушению. Нужно ли мне что-то менять в моем ограничении, или как они на самом деле должны работать?Уникальное нарушение ограничений с одиночной вставкой символов

ALTER TABLE [dbo].[Table] ADD CONSTRAINT [UC_Table_Column1_Column2_Column3_Column4] 
UNIQUE NONCLUSTERED 
(
    [Column1] ASC, 
    [Column2] ASC, 
    [Column3] ASC, 
    [Column4] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF,  
IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON 
[PRIMARY] 
+0

Каковы определения полей 4 «Столбец»? Разрешают ли они более 1 символа? –

+0

Являются ли ваши столбцы с 1 по 4 настроенными как char (1)? –

+0

VARCHAR (50) NOT NULL, VARCHAR (50) NOT NULL, INT NOT NULL, VARCHAR (25) NOT NULL – user2023116

ответ

0

Это должно работать нормально. Каково фактическое определение таблицы? Какова ваша сортировка?

-- Working Example 
CREATE TABLE dbo.[Table](
     Column1 VARCHAR(50) 
    , Column2 VARCHAR(50) 
    , Column3 INT 
    , Column4 VARCHAR(25) 
); 

ALTER TABLE [dbo].[Table] ADD CONSTRAINT [UC_Table_Column1_Column2_Column3_Column4] 
UNIQUE NONCLUSTERED 
(
    [Column1] ASC, 
    [Column2] ASC, 
    [Column3] ASC, 
    [Column4] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF,  
IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON 
[PRIMARY] 

DECLARE @iteration INT = 0; 

WHILE @iteration < 20 
BEGIN 
    INSERT INTO [dbo].[Table] 
    SELECT @iteration, @iteration, @iteration, @iteration; 

    SET @iteration += 1; 
END; 

SELECT * FROM [dbo].[Table]; 
Смежные вопросы