Nano Hash - криптовалюты, майнинг, программирование

Почему откат транзакции в SQL Server увеличивает начальные значения

Я занимаюсь начальной разработкой в ​​версии SQL Server 2008, и, поскольку это был тестовый сценарий, у меня был сценарий запросов в транзакции, чтобы фактически не влиять на таблицы базы данных.

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

Скрипт T-SQL:

Begin Tran

DECLARE @hdoc int
DECLARE @doc VARCHAR(MAX)
SET @doc =
'<?xml version="1.0" encoding="UTF-8"?>
<root>
   <places>
      <Row>
  <Field_0>53.570438</Field_0>
  <Field_1>-113.390992</Field_1>
  <Field_2>Address details 1</Field_2>
  <Field_3>Lab 1</Field_3>
</Row>
<Row>
  <Field_0>53.542062</Field_0>
  <Field_1>-113.528646</Field_1>
  <Field_2>Address details 2</Field_2>
  <Field_3>Lab 2</Field_3>
</Row>
   </places>
</root>'

EXEC sp_xml_preparedocument @hdoc OUTPUT, @doc

INSERT INTO dbo.Laboratories
(Name, Latitude, Longitude, [Image], ContentDetails, CreatedDate, CreatedBy, UpdatedDate, UpdatedBy)
SELECT ROW_NUMBER() OVER (ORDER BY Name)
, cast(Latitude as decimal(11,8)), cast(Longitude as decimal(11,8)), null, Content, GETDATE(), 1, null, null
FROM OPENXML (@hdoc, '/root/places/Row', 2)
      WITH (
         Name  nvarchar(100) 'Field_3'
            ,Latitude varchar(20) 'Field_0'
            ,Longitude varchar(18) 'Field_1'
            ,Content nvarchar(100) 'Field_2'
            )

EXEC sp_xml_removedocument @hdoc

select * from dbo.Laboratories

rollback tran

У меня есть следующий скрипт для определения текущих начальных значений

SELECT 
    IDENT_SEED(TABLE_NAME) AS Seed,
    IDENT_INCR(TABLE_NAME) AS Increment,
    IDENT_CURRENT(TABLE_NAME) AS Current_Identity,
    TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE OBJECTPROPERTY(OBJECT_ID(TABLE_NAME), 'TableHasIdentity') = 1
AND TABLE_TYPE = 'BASE TABLE'

На что ссылается из здесь


В основном вопрос

  1. Почему он увеличивает значения идентификатора, даже когда транзакция откатывается?
  2. Как исправить эту проблему в следующий раз, чтобы не влиять на начальные значения, когда транзакция не зафиксирована?

PS: я могу пересоздать личность, это нормально, я знаю об этом.



Ответы:


1
  1. После того, как значение идентификатора назначено, оно остается назначенным независимо от того, было ли выполнено откат, неудачная фиксация и т. д. Это относится в основном к MySQL AUTOINCREMENT и функции SEQUENCE.
  2. Вы не можете. Это по дизайну

Не должно иметь значения, есть ли в ИДЕНТИЧНОСТИ пробелы или нет. IDENTITY — это просто произвольное суррогатное значение, не имеющее внешнего значения: оно предназначено только для дополнения неоптимальных естественных ключей.

16.05.2013
  • Для (2): - он может использовать повторное заполнение в разделе catch, чтобы исправить (исправить вручную) эту проблему. 16.05.2013
  • @Sivakumar: Что, если появится другая транзакция и получит следующий номер до того, как произойдет RESEED? 16.05.2013
  • Таблица недоступна, пока текущая транзакция не завершится. Мы можем выполнить повторное заполнение перед откатом транзакции, поскольку откат не изменит начальное значение. Поправьте меня если я ошибаюсь. 16.05.2013
  • Спасибо за информацию и ответ. Я сегодня кое-что узнал. :) 16.05.2013
  • Новые материалы

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

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..