SSMS разрешает дублирование записей в таблице, но не последующие обновления

Edit: When I say "SQL Server", I'm really talking about the Management Studio. Sorry if that was confusing.

О, я ненавижу, когда такие вещи случаются. Вчера я работал с SQL Server и пробовал команду PIVOT, чтобы выяснить, как она работает. Поэтому я создал новую таблицу с четырьмя столбцами, и первый столбец будет иметь то же значение для первых нескольких строк.

Я добавил & quot; значение1 & quot; к первой строке, первому столбцу и нажатию клавиши enter - поскольку ключи и ограничения еще не добавлены, это позволило мне перейти вниз к следующей строке с NULL для других столбцов в первой строке (что нормально). К моему удивлению, это также позволило мне ввести «значение1» во втором ряду и войдите вниз - это должно быть невозможно, так как теперь есть два одинаковых ряда. Однако, так как я просто возился, это меня не беспокоило. Итак, я продолжаю создавать четыре строки как таковые:

Table 1

Col1       Col2      Col3     Col4
---------------------------------
Value1     NULL      NULL     NULL
Value1     NULL      NULL     NULL
Value1     NULL      NULL     NULL
Value1     NULL      NULL     NULL

Очевидно, что это странно и нарушает реляционную теорию, но мне было все равно, так как это просто таблица, которую я создал, чтобы возиться с ней. Тем не менее, я чуть не вырвал свои волосы из-за того, что произошло дальше. После того, как у меня были эти данные, я не мог сделатьanything к столу. Если бы я попытался заполнить col2, col3 или col4 в любой из строк, SQL Server крикнул бы на меня за наличие дублирующихся строк: & quot; Строка не была обновлена. Данные в строке 1 не были зафиксированы .... Обновленные или удаленные значения строк либо не делают строку уникальной, либо изменяют несколько строк (4 строки). & Quot;

Другими словами, SQL Server позволял мне вводить дублирующиеся строки, но когда я пытался обновить строки, чтобы сделать их уникальными, он не позволил мне, сославшись на наличие дублирующихся строк в качестве причины. Хуже всего то, что я даже не могу удалить строки (я получаю то же сообщение об ошибке). Единственное решение, которое я нашел однажды в этом сценарии, состояло в том, чтобы удалить таблицу и начать все сначала - что смешно.

Мой вопрос: как такое поведение может существовать в хорошо известной программе, которая развивалась более десяти лет? Я один безмозглый, и я должен принять поведение SQL Server? Для меня это неприемлемо, и SQL Server никогда не должен был позволять мне вводить повторяющиеся строки в первую очередь, или он должен был позволять мне обновлять дублирующиеся строки до тех пор, пока они не станут уникальными, а затем попытаться сохранить.

Это ни в коем случае не означает что-то вроде ненавистнических сообщений SQL Server. Относительно редко я сталкиваюсь с таким поведением, но когда я это делаю, это может действительно отстать от меня и привести меня в бешенство. Я просто не понимаю, почему в программе встроено такое поведение. Например, почему вначале он позволял мне вводить повторяющиеся строки, если он не планировал позволять мне это исправлять?

Я помню, как работал с MS Access в те времена, и я столкнулся с таким же странным, архаичным поведением. Несколько раз мне приходилось копировать огромные объемы данных, пересоздавать таблицу и копировать ее обратно только потому, что Access позволил мне сделать то, чего не должно было быть, и теперь блокирует меня от любых изменений, чтобы исправить это. - эффективно создавая тупик.

Так что здесь происходит? Нужно ли мне какое-то изменение парадигмы при приближении к SQL Server? Это я или SQL Server, что проблема? (Вы можете сказать, что это я, я могу принять это.)

Ответы на вопрос(4)

Ваш ответ на вопрос