Вставьте в Выбор … *, как проигнорировать идентификационные данные?

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

См. также: A хороший список лучших практик

Я бы добавил, очень важно, хорошо использовать модификатор final. Использование "окончательной" модификатор, когда это применимо в Java

Сводка:

  1. Используйте модификатор final для обеспечения хорошей инициализации.
  2. Избегайте возврата null в методы, например, при возврате пустых коллекций.
  3. Использовать аннотации @NotNull и @Nullable
  4. Быстрое завершение работы и использование утверждений, чтобы избежать распространения нулевых объектов через все приложение, когда они не должен быть пустым.
  5. Сначала используйте значения с известным объектом: if("knownObject".equals(unknownObject)
  6. Предпочитают valueOf() поверх toString ().
  7. Используйте null safe StringUtils StringUtils.isEmpty(null).

13
задан naide 19 July 2018 в 13:05
поделиться

8 ответов

Поскольку идентификационные данные будут сгенерированы во время вставки так или иначе, Вы могли просто удалить этот столбец из #tmp прежде, чем вставить данные назад в T?

alter table #tmp drop column id

UPD: Вот пример, я протестировал в SQL Server 2008:

create table T(ID int identity(1,1) not null, Value nvarchar(50))
insert into T (Value) values (N'Hello T!')
select top 0 * into #tmp from T
alter table #tmp drop column ID
insert into #tmp (Value) values (N'Hello #tmp')
insert into T select * from #tmp
drop table #tmp
select * from T
drop table T
9
ответ дан 1 December 2019 в 20:44
поделиться

НАБОР IDENTITY_INSERT НА

команда

INSERT УСТАНОВИЛ IDENTITY_INSERT ПРОЧЬ

13
ответ дан 1 December 2019 в 20:44
поделиться

Не с SELECT * - при выборе каждого столбца, но идентификационных данных он будет прекрасен. Единственным путем я вижу, то, что Вы могли сделать это путем динамичного создания INSERT оператор.

1
ответ дан 1 December 2019 в 20:44
поделиться

Просто перечислите colums, который Вы хотите повторно вставить, Вы никогда не должны использовать выбор * так или иначе. Если Вы не захотите вводить их, просто перетащите их от обозревателя объектов (Если Вы развернете таблицу и перетащите слово, столбцы, то Вы получите всех их, просто удалите идентификационный столбец)

1
ответ дан 1 December 2019 в 20:44
поделиться
set identity_insert on

Использование это.

1
ответ дан 1 December 2019 в 20:44
поделиться

Мог бы "обновление где T.ID = #tmp. Идентификатор" работа?

0
ответ дан 1 December 2019 в 20:44
поделиться
  1. это дает мне шанс предварительно просмотреть данные, прежде чем я сделаю вставку
  2. , у меня есть соединения между временными таблицами как часть моего вычисления; временные таблицы позволяют мне фокусироваться на точных данных набора, с которыми я работаю. Я думаю, что это было этим. Какие-либо предложения/комментарии?

Для части 1, как упомянуто Kolten в одном из комментариев, инкапсулируя Ваши операторы в транзакции и добавляя параметр для переключения между дисплеем и фиксацией удовлетворит потребности. Для Части 2 я был бы потребности видеть, каких "вычислений" Вы делаете попытку. Ограничение Ваших данных к временной таблице может быть по усложнению ситуации.

-1
ответ дан 1 December 2019 в 20:44
поделиться

INSERT INTO #Table SELECT MAX (Id) + ROW_NUMBER () OVER (ORDER BY Id)

0
ответ дан 1 December 2019 в 20:44
поделиться
Другие вопросы по тегам:

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