Изменить: Когда я говорю "SQL Server", я действительно говорю об Management Studio. Извините, если это сбивает с толку.
О, я ненавижу, когда такие вещи случаются. Вчера я работал с SQL Server и тестировал команду PIVOT, чтобы попытаться выяснить, как она работает. Поэтому я создал новую таблицу с четырьмя столбцами, и первый столбец будет иметь одно и то же значение для первых нескольких строк.
Я добавил значение "value1" в первую строку, первый столбец и нажал клавишу ввода. Никакие клавиши или ограничения не были добавлены, это позволило мне перейти к следующей строке с NULL для других столбцов в первой строке (что хорошо). К моему удивлению, это также позволило мне ввести "value1" во второй строке и войти вниз - это должно быть невозможно, так как теперь есть две одинаковые строки. Однако, поскольку я просто возился, это меня не беспокоило. Поэтому я перехожу к созданию четырех строк как таковых:
Таблица 1
Col1 Col2 Col3 Col4
---------------------------------
Value1 NULL NULL NULL
Value1 NULL NULL NULL
Value1 NULL NULL NULL
Value1 NULL NULL NULL
Очевидно, это странно и ломает реляционную теорию, но мне все равно, потому что это просто таблица, которую я создал, чтобы обходиться. Тем не менее, я просто вытащил волосы за то, что произошло дальше. После того, как у меня были эти данные, я не мог сделать ничего в таблице. Если бы я попытался заполнить col2, col3 или col4 в любой из строк, SQL Server будет кричать на меня за то, что у вас есть повторяющиеся строки: "Ни одна строка не была обновлена. Данные в строке 1 не были выполнены.... Значение строки обновлены или удалены либо не делают строку уникальной, либо изменяют несколько строк (4 строки)."
Таким образом, SQL Server разрешил мне вводить повторяющиеся строки, но когда я попытался обновить строки, чтобы сделать их уникальными, это не позволило бы мне, сославшись на то, что в качестве причины есть повторяющиеся строки. Хуже всего то, что я даже не мог удалить строки (я получаю то же сообщение об ошибке). Единственное решение, которое я нашел однажды в этом сценарии, - удалить таблицу и начать все, что смешно.
Мой вопрос: как такое поведение может существовать в хорошо известной программе, которая развилась за десятилетие? Могу ли я быть безмозглым, и я должен принять поведение SQL Server? Для меня это неприемлемо, и SQL Server должен либо никогда не разрешать мне вводить повторяющиеся строки в первую очередь, либо он должен был позволять мне обновлять повторяющиеся строки до тех пор, пока они не станут уникальными, а затем попытайтесь сохранить.
Это ни в коем случае не должно быть своего рода ненавистной публикацией SQL Server. Это относительно редко, когда я сталкиваюсь с подобным поведением, но когда я это делаю, это может действительно поднять меня и свести с ума. Я просто не понимаю, почему в программе есть такое поведение. Например, почему в мире это позволило мне ввести дубликаты строк, если это не решило, чтобы я исправить это?
Я помню, как работал с MS Access в тот же день, и я столкнулся с таким же странным, архаичным поведением. Несколько раз мне приходилось копировать огромное количество данных, воссоздавать таблицу и копировать ее только потому, что Access разрешил мне делать что-то, чего у нее не было, и теперь блокирует меня от любых изменений, чтобы исправить ее - эффективно создавая тупик.
Итак, что здесь происходит? Нужно ли мне какое-то изменение парадигмы при приближении к SQL Server? Является ли это я или SQL Server проблемой? (Вы можете сказать это мне, я могу принять это.)