Member 13650918 Ответов: 2

Как присвоить значения таблице первичных ключей?


insert into Student values(12,'jh','hjf',GETDATE())


Что я уже пробовал:

Здесь я собираюсь вставить значения в таблицу. Он отображает сообщение об ошибке, как.
Явное значение столбца identity в таблице 'Student' может быть задано только в том случае, если используется список столбцов и включен параметр IDENTITY_INSERT.

Jörgen Andersson

Решение 1-это ответ на ваш актуальный вопрос.
Но нам нужно задать следующий вопрос: почему вы хотите установить идентификатор в столбце identity вручную?

2 Ответов

Рейтинг:
2

Karthik_Mahalingam

пробовать

SET IDENTITY_INSERT Student on
insert into Student values(12,'jh','hjf',GETDATE())
SET IDENTITY_INSERT Student off

Пожалуйста, прочтите это
SET IDENTITY_INSERT (Transact-SQL) | Microsoft Docs[^]
Как включить и выключить IDENTITY_INSERT с помощью SQL Server 2008? - переполнение стека[^]


Рейтинг:
0

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 колонка в первую очередь?