CHill60
Решение 1 не решает вашу проблему, вам также нужно указать имена столбцов, которые вы хотите заполнить вставкой.
Например:
SET IDENTITY_INSERT #Student on
insert into #Student (id, firstname, surname, joindate) values(5,'jh','hjf',GETDATE())
SET IDENTITY_INSERT #Student off
Но, как утверждает Йорген Андерссон в своем комментарии к вашему вопросу, почему вы хотите вставить конкретное значение для столбца идентификаторов? Это не очень хорошая практика.
Хорошей практикой является всегда перечислять столбцы, которые вы собираетесь заполнить - это экономит основные переделки, если есть изменения в схеме таблицы для начала. Это также делает более очевидным, что вы есть
нет собираюсь включить столбец идентичности :-) Так будет лучше:
insert into #Student (firstname, surname, joindate) values('jh1','hjf1',GETDATE())
Чего вы, возможно, не заметили, так это эффекта переопределения столбца идентификаторов. Если вы запросите мои данные после двух обновлений выше я получу
5 jh hjf 2018-02-01
6 jh1 hjf1 2018-02-01
SQL не заполнит тот пробел, который вы создали.
Хуже того, если я случайно использую
id
то есть уже на столе я не получу никакого предупреждения! Настоящий кодекс
SET IDENTITY_INSERT #Student on
insert into #Student (id, firstname, surname, joindate) values(5,'jh3','hjf3',GETDATE())
SET IDENTITY_INSERT #Student off
привести
5 jh hjf 2018-02-01
6 jh1 hjf1 2018-02-01
5 jh3 hjf3 2018-02-01
Если у меня есть какая-то обработка, которая полагается на
id
будучи уникальным, он собирается сломаться. Если у меня нет никаких причин для этого
id
как уникальное число тогда зачем определять его как
identity
колонка в первую очередь?