Я добавил новый столбец в таблице X
Этот столбец «cn» должен быть уникальным и обязательным, но старые данные не имеют никакого значения.
Как обновить существующие записи случайными или случайными уникальными данными?
Спасибо.
источник
Я добавил новый столбец в таблице X
Этот столбец «cn» должен быть уникальным и обязательным, но старые данные не имеют никакого значения.
Как обновить существующие записи случайными или случайными уникальными данными?
Спасибо.
Хотя я думаю, что вы уже создали столбец, в этом ответе я предполагаю, что столбец еще не существует. IMO, уникальный обязательный столбец никогда не должен добавляться без планирования, как сначала заполнить существующие строки. Поэтому я предоставлю методы для этого, начиная с нуля.
Как вы это сделаете, зависит от того, что входит в заполнение значений.
После того, какой метод вы используете, добавьте уникальное ограничение на столбец, чтобы обеспечить целостность данных. Для методов 1 и 2 это может быть сделано в пределах одного оператора или в пользовательской транзакции (не показана), и должно быть сделано в пользовательской транзакции в методе 3.
Вероятно, есть несколько других неясных способов сделать это, но я думаю, что я рассмотрел наиболее распространенные.
Способ 1: добавить столбец IDENTITY
ALTER TABLE MyTable ADD MyColumn int IDENTITY(1, 2) NOT NULL
Это заполнит все строки в таблице целочисленными значениями, начиная с начального значения (1), увеличиваясь на величину приращения (2) для каждой строки. Я считаю, что порядок заполнения значений не определен (если вам нужно указать порядок, используйте метод 3).
Способ 2: заполнить с использованием ограничения по умолчанию
ALTER TABLE MyTable ADD MyColumn uniqueidentifier NOT NULL
CONSTRAINT DF_MyTable_MyColumn
DEFAULT (NEWSEQUENTIALID())
Это будет делать три вещи атомарно: 1. Добавить столбец, который не допускает NULL
значений; 2. Создайте ограничение по умолчанию для столбца; 3. Заполните каждую строку в таблице, используя ограничение по умолчанию.
Хотя в этом примере используется uniqueidentifier
столбец, он работает так же хорошо с любым типом данных и ограничением по умолчанию.
Способ 3: заполнить с помощью инструкции UPDATE
Этот случай может возникнуть, когда, например, существует значение из другой части вашего приложения, которое необходимо добавить в таблицу, или вам нужно указать точный порядок для уникальных значений.
BEGIN TRANSACTION
ALTER TABLE MyTable ADD MyColumn int NULL
UPDATE MyTable
SET MyColumn = ...
ALTER TABLE MyTable ALTER COLUMN MyColumn int NOT NULL
COMMIT TRANSACTION
Метод 4: Заполните, используя объект SEQUENCE
Для SQL Server 2012 вы можете заполнить столбец, используя значения, сгенерированные SEQUENCE
объектом - я еще не работал с этим вообще, поэтому я буду ссылаться на статью MSDN для полноты.
update mytable set mycolumn = next value for mysequence where mycolumn is null;
Если вас устраивает число, начинающееся с 1, вы можете использовать
row_number()
.источник
Следующий столбец обновлений 'cn' с порядковым номером, начинающимся с 1
http://www.mssqltips.com/sqlservertip/1467/populate-a-sql-server-column-with-a-sequential-number-not-using-an-identity/
источник
попробуйте это обновить, используя последовательность ... Вы должны сделать ТОП из-за предложения order by в операторе обновления. Я использовал это утверждение на SQL SERVER 2012
источник
И если все это по-прежнему не сработает (возможно, потому что это старый SQL-92), вы можете разбить его на несколько этапов, как предлагает Зигги Crueltyfree Zeitgeister, здесь .
источник
RecordNumber
? Похоже на проприетарную функцию / функцию Filemaker. Не относится к SQL Server и не соответствует стандарту SQL 92.Filemaker
поэтому я не думаю, что ответ уместен. Вы можете использовать временную таблицу и заполнить этот столбецROW_NUMBER()
функцией.