«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как автоматически увеличить столбец, не являющийся идентификатором, в SQL Server 2005 без ORDER BY?

Как автоматически увеличить столбец, не являющийся идентификатором, в SQL Server 2005 без ORDER BY?

Опубликовано 23 декабря 2024 г.
Просматривать:507

How to Auto-Increment a Non-Identity Column in SQL Server 2005 Without ORDER BY?

Генерация идентификаторов автоинкремента в SQL Server 2005 без ORDER BY

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

При отсутствии допустимого поля ORDER BY можно использовать функцию ROW_NUMBER. Однако отсутствие явного порядка не гарантирует сохранение исходного порядка данных. Это связано с тем, что «не упорядочено» отличается от «сохранения исходного порядка».

Чтобы решить эту проблему, решение предполагает отказ от явного упорядочения следующим образом:

INSERT dbo.TargetTable (ID, FIELD)
SELECT
   Row_Number() OVER (ORDER BY (SELECT 1))
        Coalesce(
         (SELECT Max(ID) FROM dbo.TargetTable WITH (TABLOCKX, HOLDLOCK)),
         0
      ),
   FieldValue
FROM dbo.SourceTable
WHERE {somecondition};

Этот подход вычисляет максимальный идентификатор и вставляет данные при получении блокировок, чтобы избежать ошибок параллелизма.

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

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3