Скопируйте строки из той же таблицы и обновите столбец ID

Сначала давайте посмотрим, что логически делает этот цикл.

i будет многократно переполнен. Каждые 2 32 (около 4 миллиардов) итераций цикла выходные данные будут печататься, а k будет увеличиваться.

Это логичный взгляд. Тем не менее, компиляторы и среды выполнения могут оптимизироваться, и если вы получаете больше значения каждую секунду или около того, совершенно очевидно, что такая оптимизация должна иметь место. Даже с современным предсказанием ветвлений, неправильным выполнением и т. Д. Я нахожу маловероятным, что ЦП будет обходить узкий цикл более одного раза за такт (и даже то, что я считаю маловероятным). Тот факт, что в отладчике вы никогда не увидите ничего, кроме нуля, подтверждает идею, что код оптимизируется.

Вы упоминаете, что при использовании «long» требуется больше времени, и вы видите другие значения. Если в неоптимизированном цикле использовался «длинный» счетчик, можно ожидать, что между значениями будет много десятилетий. Опять же, очевидно, что происходит оптимизация, но кажется, что оптимизатор сдается, прежде чем он полностью оптимизировал ненужные итерации.

29
задан Abe Miessler 22 September 2010 в 14:30
поделиться

2 ответа

Может использовать MERGE в SQL Server 2008, имеет преимущество использования OUTPUT для возврата значений DefID, при условии, что они генерируются автоматически, например,

MERGE INTO ProductDefinition
USING (
       SELECT 16, P1.Definition, P1.Description
         FROM ProductDefinition AS P1
        WHERE P1.ProdID = 15
      ) AS source (ProdID, Definition, Description)
ON 0 = 1
WHEN NOT MATCHED THEN
   INSERT (ProdID, Definition, Description)
   VALUES (ProdID, Definition, Description)
   OUTPUT inserted.DefID, inserted.ProdID, 
             inserted.Definition, inserted.Description;
3
ответ дан 28 November 2019 в 01:01
поделиться

Если вы хотите повторить данные в одной и той же таблице, используйте следующую логику:

сначала вставьте отметку туда, куда вы хотите вставить ...

insert into [table](column1,column2)

секунду, выберите оценку, откуда вы хотите взять данные для вставки ....

select (column1/'your value',column2/'your value') from [table]

теперь установите фильтр, строки которого вы хотите дублировать

where (your condition)

, так как хотите копировать одни и те же данные для разных клиентов, я использовал этот запрос.

1
ответ дан 28 November 2019 в 01:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: